Bug 1417690

Summary: segfault in i965_dri.so in libgdx application
Product: [Fedora] Fedora Reporter: MB <michael.buro>
Component: mesaAssignee: Adam Jackson <ajax>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: high Docs Contact:
Priority: unspecified    
Version: 25CC: ajax, fschwarz, ignatenko, michael.buro
Target Milestone: ---   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2017-01-31 17:38:36 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
jvm error dump when running java -jar SkatGame.jar none

Description MB 2017-01-30 16:50:00 UTC
Created attachment 1245928 [details]
jvm error dump when running java -jar SkatGame.jar

Description of problem:

After "yum update" a few days ago, a libgdx application is no longer working. It segfaults right away in i965_dri.so

Version-Release number of selected component (if applicable):

  segfault experienced with 

   mesa-*-13.0.3-4.fc25.x86_64

   and 

     openjdkjava-1.8.0-openjdk-1.8.0.121-1.b14.fc25.x86_64  

       or 

     Oracle's jdk1.8.0_121

   and libgdx versions 1.8.0 or 1.9.5

  The SkatGame application works on a similar FC25 system running a proprietary NVIDIA driver. It also worked on this machine for one year up until a software update last week (presumably involving mesa-*). My attempts to downgrade to an earlier mesa version failed.

How reproducible:

  every time

Steps to Reproduce:

  1. download https://skatgame.net/app/SkatGame.jar
  2. issue command  java -jar SkatGame.jar

Actual results:

  segmentation fault in i965_dri.so, jvm bug report attached

Expected results:

  Window opens with SkatGame logo


Additional info:

SkatGame Application Page:  https://skatgame.net/app/
SkatGame jar file:          https://skatgame.net/app/SkatGame.jar

lscpi output:

00:00.0 Host bridge: Intel Corporation 3rd Gen Core processor DRAM Controller (rev 09)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port (rev 09)
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04)
00:16.0 Communication controller: Intel Corporation 7 Series/C216 Chipset Family MEI Controller #1 (rev 04)
00:1a.0 USB controller: Intel Corporation 7 Series/C216 Chipset Family USB Enhanced Host Controller #2 (rev 04)
00:1b.0 Audio device: Intel Corporation 7 Series/C216 Chipset Family High Definition Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 7 Series/C216 Chipset Family PCI Express Root Port 1 (rev c4)
00:1c.1 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 2 (rev c4)
00:1c.3 PCI bridge: Intel Corporation 7 Series/C216 Chipset Family PCI Express Root Port 4 (rev c4)
00:1c.5 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 6 (rev c4)
00:1d.0 USB controller: Intel Corporation 7 Series/C216 Chipset Family USB Enhanced Host Controller #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation HM77 Express Chipset LPC Controller (rev 04)
00:1f.2 RAID bus controller: Intel Corporation 82801 Mobile SATA Controller [RAID mode] (rev 04)
00:1f.3 SMBus: Intel Corporation 7 Series/C216 Chipset Family SMBus Controller (rev 04)
01:00.0 VGA compatible controller: NVIDIA Corporation GF108M [GeForce GT 630M] (rev a1)
08:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5229 PCI Express Card Reader (rev 01)
0a:00.0 Network controller: Intel Corporation Centrino Wireless-N 2230 (rev c4)
0b:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 07)

==========

LWJGL Call Context where segfault happens (in native function nDestroy):

public void destroy(PeerInfo peer_info, ByteBuffer handle) throws LWJGLException {
		LinuxDisplay.lockAWT();
		try {
			ByteBuffer peer_handle = peer_info.lockAndGetHandle();
			try {
				nDestroy(peer_handle, handle);
			} finally {
				peer_info.unlock();
			}
		} finally {
			LinuxDisplay.unlockAWT();
		}
	}

	private static native void nDestroy(ByteBuffer peer_handle, ByteBuffer context_handle) throws LWJGLException;
}

==================

involved JNI code in lwjgl:

JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxContextImplementation_nDestroy
  (JNIEnv *env, jclass clazz, jobject peer_handle, jobject context_handle) {
        X11PeerInfo *peer_info = (*env)->GetDirectBufferAddress(env, peer_handle);
        X11Context *context_info = (*env)->GetDirectBufferAddress(env, context_handle);
        lwjgl_glXDestroyContext(peer_info->display, context_info->context);
}

==================

glXDestroyContext appears to be hooked up to the external GL library here: 

static void extgl_InitGLX12(void) {
        ExtFunction functions[] = {
                {"glXChooseVisual", (void*)&lwjgl_glXChooseVisual},
                {"glXCopyContext", (void*)&lwjgl_glXCopyContext},
                {"glXCreateContext", (void*)&lwjgl_glXCreateContext},
                {"glXCreateGLXPixmap", (void*)&lwjgl_glXCreateGLXPixmap},
                {"glXDestroyContext", (void*)&lwjgl_glXDestroyContext},
                {"glXDestroyGLXPixmap", (void*)&lwjgl_glXDestroyGLXPixmap},
                {"glXGetConfig", (void*)&lwjgl_glXGetConfig},
                {"glXGetCurrentContext", (void*)&lwjgl_glXGetCurrentContext},
                {"glXGetCurrentDrawable", (void*)&lwjgl_glXGetCurrentDrawable},
                {"glXIsDirect", (void*)&lwjgl_glXIsDirect},
                {"glXMakeCurrent", (void*)&lwjgl_glXMakeCurrent},
                {"glXQueryExtension", (void*)&lwjgl_glXQueryExtension},
                {"glXQueryVersion", (void*)&lwjgl_glXQueryVersion},
                {"glXSwapBuffers", (void*)&lwjgl_glXSwapBuffers},
                {"glXUseXFont", (void*)&lwjgl_glXUseXFont},
                {"glXWaitGL", (void*)&lwjgl_glXWaitGL},
                {"glXWaitX", (void*)&lwjgl_glXWaitX},
                {"glXGetClientString", (void*)&lwjgl_glXGetClientString},
                {"glXQueryServerString", (void*)&lwjgl_glXQueryServerString},
                {"glXQueryExtensionsString", (void*)&lwjgl_glXQueryExtensionsString}};
        symbols_flags.GLX12 = extgl_InitializeFunctions(sizeof(functions)/sizeof(ExtFunction), functions);
}

Comment 1 MB 2017-01-31 17:38:36 UTC
Today I experimented a bit more. I had repo fedora-updates-testing enabled. Disabling it and running dnf distro-sync resolved the issue. I am using mesa version 13.0.3-5 right now. So, perhaps the crash is caused by changes in the current updates-testing packages. In any case, skatgame.jar is working again, and  this ticket can be closed.