From: Reichelt <rei...@ig...> - 2000-08-15 20:32:47
|
Hi everybody, I ran into the following problem (which is probably related to threads) while trying to compile Geomview (an interactive 3D geometry viewing program, http://www.geom.umn.edu/software/download/geomview.html) using libGL and libGLU from Mesa-3.2.1: Geomview enters an infinite loop (this problem also occurs with Mesa-3.2, but not with Mesa-3.2beta). If I recompile Mesa-3.2.1 without "$(THREAD_LIBS)" in line 126 of "src/Makefile.in" libGL_la_LIBADD = $(DRV_X86) $(DRV_FX) $(DRV_FX_X86) $(DRV_GGI) $(DRV_OSMESA) $(DRV_SVGA) $(DRV_X11) # $(THREAD_LIBS) everthing seems to work fine. Does anybody know what happens and why? Is this a Mesa-bug or Geomview-bug or some general problem with threads? By the way, I'm using gcc 2.95.1, linux-kernel 2.2.1, XFree86 3.3.6, and geomview 1.6.1p9 on a PentiumII-dual-board. Greetings, Volker Reichelt |
From: Brian P. <br...@va...> - 2000-08-16 16:46:41
|
Reichelt wrote: > > Hi everybody, > > I ran into the following problem (which is probably related to threads) > while trying to compile Geomview (an interactive 3D geometry viewing > program, http://www.geom.umn.edu/software/download/geomview.html) using > libGL and libGLU from Mesa-3.2.1: > > Geomview enters an infinite loop (this problem also occurs with > Mesa-3.2, but not with Mesa-3.2beta). If I recompile Mesa-3.2.1 without > "$(THREAD_LIBS)" in line 126 of "src/Makefile.in" > > libGL_la_LIBADD = $(DRV_X86) $(DRV_FX) $(DRV_FX_X86) $(DRV_GGI) > $(DRV_OSMESA) $(DRV_SVGA) $(DRV_X11) # $(THREAD_LIBS) > > everthing seems to work fine. Does anybody know what happens and why? > Is this a Mesa-bug or Geomview-bug or some general problem with threads? > > By the way, I'm using gcc 2.95.1, linux-kernel 2.2.1, XFree86 3.3.6, > and geomview 1.6.1p9 on a PentiumII-dual-board. Do you know if geomview itself is multi-threaded? If so, does it call XInitThreads()? Up until Mesa 3.3, only the OSMesa (Off-Screen) driver for Mesa was known to be thread-safe. In Mesa 3.3 the Xlib driver is thread-safe and can be tested with Mesa-3.3/xdemos/glthreads.c Clients must call XInitThreads(). I plan to do more work in the XMesa driver to remove that requirement as well. -Brian |
From: Reichelt <rei...@ig...> - 2000-08-25 15:50:42
|
Dear Brian, last week I wrote about troubles with Mesa-3.2.1 in conjunction with Geomview. Here are some more specific details: On my machine (a Pentium II dual bord running Linux 2.2.12) Geomview freezes before opening a window if I use the Mesa-3.2.1 libraries. Gbd reports the following stack in this situation: (gdb) bt #0 0x404beea7 in __sched_yield () at soinit.c:27 #1 0x4017d125 in __pthread_mutex_unlock (mutex=0x81236a8) at spinlock.h:20 #2 0x4017e86c in __funlockfile (stream=0x813cde8) at lockfile.c:47 #3 0x4017b49a in _pthread_cleanup_pop_restore (buffer=0xbffff3b8, execute=1) at cancel.c:109 #4 0x4048b63d in _IO_fclose (fp=0x813cde8) at iofclose.c:45 #5 0x8054a57 in drawer_init () #6 0x8060650 in init_geomview () #7 0x8068a63 in main () Obviously there is something wrong with threads in the stdio-function "fclose". So I compiled Mesa-3.2.1 without linking "libpthread" by replacing libGL_la_LIBADD = $(DRV_X86) $(DRV_FX) $(DRV_FX_X86) $(DRV_GGI) $(DRV_OSMESA) $(DRV_SVGA) $(DRV_X11) $(THREAD_LIBS) by libGL_la_LIBADD = $(DRV_X86) $(DRV_FX) $(DRV_FX_X86) $(DRV_GGI) $(DRV_OSMESA) $(DRV_SVGA) $(DRV_X11) in Mesa's "src/Makefile.in" and everything seems to work fine. I think that's strange because I didn't change the code but just skipped the library. > Do you know if geomview itself is multi-threaded? If so, does it > call XInitThreads()? > > Up until Mesa 3.3, only the OSMesa (Off-Screen) driver for Mesa > was known to be thread-safe. In Mesa 3.3 the Xlib driver is > thread-safe and can be tested with Mesa-3.3/xdemos/glthreads.c > Clients must call XInitThreads(). I plan to do more work in > the XMesa driver to remove that requirement as well. As far as I know Geomview doesn't use threads (at least "grep" reports no occurances of the word "thread" in the sources). So there should be no need for XInitThreads(), right? The standard libraries however, seem to use threads (maybe my version of them is just too old --- but they are based on glibc and not on libc5???). What do you think? Do you know what happens to the standard routines, if you link "libpthread"? Or could Tcl/Tk (which is used by Geomview) cause any trouble? Best regards, Volker Reichelt |
From: Brian P. <br...@va...> - 2000-08-28 20:54:52
|
Reichelt wrote: > > Dear Brian, > > last week I wrote about troubles with Mesa-3.2.1 in conjunction with > Geomview. Here are some more specific details: > > On my machine (a Pentium II dual bord running Linux 2.2.12) Geomview > freezes before opening a window if I use the Mesa-3.2.1 libraries. > Gbd reports the following stack in this situation: > > (gdb) bt > #0 0x404beea7 in __sched_yield () at soinit.c:27 > #1 0x4017d125 in __pthread_mutex_unlock (mutex=0x81236a8) at spinlock.h:20 > #2 0x4017e86c in __funlockfile (stream=0x813cde8) at lockfile.c:47 > #3 0x4017b49a in _pthread_cleanup_pop_restore (buffer=0xbffff3b8, execute=1) > at cancel.c:109 > #4 0x4048b63d in _IO_fclose (fp=0x813cde8) at iofclose.c:45 > #5 0x8054a57 in drawer_init () > #6 0x8060650 in init_geomview () > #7 0x8068a63 in main () > > Obviously there is something wrong with threads in the stdio-function > "fclose". So I compiled Mesa-3.2.1 without linking "libpthread" by replacing > > libGL_la_LIBADD = $(DRV_X86) $(DRV_FX) $(DRV_FX_X86) $(DRV_GGI) > $(DRV_OSMESA) $(DRV_SVGA) $(DRV_X11) $(THREAD_LIBS) > > by > > libGL_la_LIBADD = $(DRV_X86) $(DRV_FX) $(DRV_FX_X86) $(DRV_GGI) > $(DRV_OSMESA) $(DRV_SVGA) $(DRV_X11) > > in Mesa's "src/Makefile.in" and everything seems to work fine. > I think that's strange because I didn't change the code but just > skipped the library. That is strange. I have no explanation. > > Do you know if geomview itself is multi-threaded? If so, does it > > call XInitThreads()? > > > > Up until Mesa 3.3, only the OSMesa (Off-Screen) driver for Mesa > > was known to be thread-safe. In Mesa 3.3 the Xlib driver is > > thread-safe and can be tested with Mesa-3.3/xdemos/glthreads.c > > Clients must call XInitThreads(). I plan to do more work in > > the XMesa driver to remove that requirement as well. > > As far as I know Geomview doesn't use threads (at least "grep" reports > no occurances of the word "thread" in the sources). So there should be no > need for XInitThreads(), right? Right. > The standard libraries however, seem to use threads (maybe my version of > them is just too old --- but they are based on glibc and not on libc5???). > What do you think? Do you know what happens to the standard routines, if > you link "libpthread"? Or could Tcl/Tk (which is used by Geomview) cause > any trouble? I've heard of a number of problems involving pthreads and the linker. I haven't followed the development of Linux thread libraries close enough to know what's going on. -Brian |