Hi,

On Thu, Mar 25, 2010 at 12:05:56AM +0000, Edd Barrett wrote:
> On Wed, Mar 24, 2010 at 11:41:41PM +0300, Kirill Bychkov wrote:
> > > I thought I'd try this on amd64, but it doesn't do anything.
> > > When I run "vlc", nothing happens.  It prints its little
> > > "VLC media player 1.0.5 Goldeneye" banner, and that's it.
> > > No window comes up or anything.
> > 
> > I've seen the same behaviour on amd64
> 
> Thats what i was getting on sparc64.

OK, after some fiddling, here are some findings:

I built a vlc binary with debug symbols and ran it with gdb, hitting ctrl+c to
see where execution was up to in the hope. At first it looked like the plugin
loading was hanging, but it turns out it just takes a while.

I added printf()s to module_Load() in os.c allowing me to see when the plugin
loading was complete.

Interrupting execution aftter this reveals that the real problem *appears* to
exist in the threading libraries. At the time VLC is hanging, it is obviously
not blocking as it shows about 25% CPU usage on my sparc64. It is probably 
stuck in an infinite loop around a few function calls. Each
time I interrupt the process to examine the stack I get slightly different
results. Attached are script(1) outcomes of 2 such stack traces.

There is some odd looking dbus behavior going on here, I wonder if there is a
bug there:

---8<---
#4  0x0000000046516c84 in dbus_shutdown () from
/usr/local/lib/libdbus-1.so.7.1^M
No symbol table info available.^M
#5  0x0000000046519558 in dbus_shutdown () from
/usr/local/lib/libdbus-1.so.7.1^M
No symbol table info available.^M
#6  0x0000000046519840 in dbus_shutdown () from
/usr/local/lib/libdbus-1.so.7.1^M
No symbol table info available.^M
#7  0x000000004650cffc in dbus_threads_init_default ()^M
   from /usr/local/lib/libdbus-1.so.7.1^M
No symbol table info available.^M
#8  0x000000004650cffc in dbus_threads_init_default ()^M
   from /usr/local/lib/libdbus-1.so.7.1^M
No symbol table info available.^M
Previous frame identical to this frame (corrupt stack?)^M
---8<---

Could even be a compiler bug we are facing? I will try a build with GCC4.

I am now hoping that someone with mad threading skillz can step up to help :\

Is there any other information we can get from GDB that can help?

Attached

-- 
Best Regards
Edd Barrett

http://www.theunixzoo.co.uk
Script started on Sun Mar 28 19:26:04 2010
$ gdb c vlc

GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "sparc64-unknown-openbsd4.7"...
(gdb) run  
Starting program: /usr/local/bin/vlc 
VLC media player 1.0.5 Goldeneye
Loading /usr/local/lib/vlc/access/libaccess_bd_plugin.so ...done
Loading /usr/local/lib/vlc/access/libaccess_directory_plugin.so ...done
Loading /usr/local/lib/vlc/access/libaccess_fake_plugin.so ...done
... etc...
Loading /usr/local/lib/vlc/video_output/libxvideo_plugin.so ...done
Loading /usr/local/lib/vlc/video_output/libyuv_plugin.so ...done
Loading /usr/local/lib/vlc/visualization/libvisual_plugin.so ...done
^C
Program received signal SIGINT, Interrupt.
0x000000004a8fdae8 in poll () from /usr/lib/libc.so.53.1
(gdb) bt full
#0  0x000000004a8fdae8 in poll () from /usr/lib/libc.so.53.1
No symbol table info available.
#1  0x0000000044dbe26c in _thread_kern_poll (wait_reqd=0)
    at /usr/src/lib/libpthread/uthread/uthread_kern.c:760
        count = 0
        kern_pipe_added = 1
        i = 1269800833
        found = 1161595537
        nfds = 2
        timeout_ms = 10005
        pthread = (struct pthread *) 0x0
        next = (struct pthread *) 0x0
        ts = {tv_sec = 1269800833, tv_nsec = 655777000}
        tv = {tv_sec = 1269800833, tv_usec = 655777}
#2  0x0000000044dbdc70 in _thread_kern_sched (scp=0x0)
    at /usr/src/lib/libpthread/uthread/uthread_kern.c:382
        ts = {tv_sec = 1269800833, tv_nsec = 655777000}
        tv = {tv_sec = 1269800833, tv_usec = 655777}
        curthread = (struct pthread *) 0x453c99e0
        pthread = 0x44fc4050
        pthread_h = 0x0
        current_tick = 1161606128
---Type <return> to continue, or q <return> to quit---
        add_to_prioq = 0
        old_thread_run = 0x49ab1c00
#3  0x0000000044db6dac in read (fd=11, buf=0x4cedd800, nbytes=1024)
    at /usr/src/lib/libpthread/uthread/uthread_read.c:83
        curthread = (struct pthread *) 0x49ab1c00
        ret = -1
        type = 1276
#4  0x0000000046516c84 in dbus_shutdown () from /usr/local/lib/libdbus-1.so.7.1
No symbol table info available.
#5  0x0000000046519558 in dbus_shutdown () from /usr/local/lib/libdbus-1.so.7.1
No symbol table info available.
#6  0x0000000046519840 in dbus_shutdown () from /usr/local/lib/libdbus-1.so.7.1
No symbol table info available.
#7  0x000000004650cffc in dbus_threads_init_default ()
   from /usr/local/lib/libdbus-1.so.7.1
No symbol table info available.
#8  0x000000004650cffc in dbus_threads_init_default ()
   from /usr/local/lib/libdbus-1.so.7.1
No symbol table info available.
Previous frame identical to this frame (corrupt stack?)
(gdb) The program is running.  Exit anyway? (y or n) y
Killed 
$ ^D


Script done on Sun Mar 28 19:28:09 2010
Script started on Sun Mar 28 19:28:59 2010
$ gdb vlc
GNU gdb 6.3
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "sparc64-unknown-openbsd4.7"...
(gdb) run
Starting program: /usr/local/bin/vlc 
VLC media player 1.0.5 Goldeneye
Loading /usr/local/lib/vlc/access/libaccess_bd_plugin.so ...done
Loading /usr/local/lib/vlc/access/libaccess_directory_plugin.so ...done
Loading /usr/local/lib/vlc/access/libaccess_fake_plugin.so ...done
... etc ...
Loading /usr/local/lib/vlc/video_output/libxvideo_plugin.so ...done
Loading /usr/local/lib/vlc/video_output/libyuv_plugin.so ...done
Loading /usr/local/lib/vlc/visualization/libvisual_plugin.so ...done
^C
Program received signal SIGINT, Interrupt.
0x000000004a8c1ae8 in poll () from /usr/lib/libc.so.53.1
(gdb) bt full
#0  0x000000004a8c1ae8 in poll () from /usr/lib/libc.so.53.1
No symbol table info available.
#1  0x0000000049b4e26c in _thread_kern_poll (wait_reqd=0)
    at /usr/src/lib/libpthread/uthread/uthread_kern.c:760
        count = 0
        kern_pipe_added = 1
        i = 1269801021
        found = 0
        nfds = 2
        timeout_ms = 10000
        pthread = (struct pthread *) 0x0
        next = (struct pthread *) 0x0
        ts = {tv_sec = 1269801021, tv_nsec = 920000000}
        tv = {tv_sec = 1269801021, tv_usec = 920000}
#2  0x0000000049b4dc70 in _thread_kern_sched (scp=0x0)
    at /usr/src/lib/libpthread/uthread/uthread_kern.c:382
        ts = {tv_sec = 1269801021, tv_nsec = 920000000}
        tv = {tv_sec = 1269801021, tv_usec = 920000}
        curthread = (struct pthread *) 0x4a1599e0
        pthread = 0x49d54050
        pthread_h = 0x0
        current_tick = 1242936304
---Type <return> to continue, or q <return> to quit---
        add_to_prioq = 0
        old_thread_run = 0x45b38c00
#3  0x0000000049b4b584 in pthread_cond_timedwait (cond=0x49d54110, 
    mutex=0x49d54108, abstime=0x4e603e70)
    at /usr/src/lib/libpthread/uthread/uthread_cond.c:431
        curthread = (struct pthread *) 0x45b38c00
        rval = 0
        done = 0
        interrupted = 0
        seqno = 0
#4  0x0000000049b43034 in _thread_gc (arg=0x0)
    at /usr/src/lib/libpthread/uthread/uthread_gc.c:181
        curthread = (struct pthread *) 0x45b38c00
        f_debug = 0
        f_done = 0
        ret = 1276
        mask = 4294967295
        pthread = 0x4aff2000
        next = 0x8
        pthread_cln = 0x0
        abstime = {tv_sec = 1269801031, tv_nsec = 920032952}
        p_stack = (void *) 0x0
---Type <return> to continue, or q <return> to quit---
#5  0x0000000049b42cf8 in _thread_start ()
    at /usr/src/lib/libpthread/uthread/uthread_create.c:241
        curthread = (struct pthread *) 0x4aff2000
#6  0x0000000049b42cc0 in pthread_create (thread=0x0, attr=0x0, 
    start_routine=0, arg=0x0)
    at /usr/src/lib/libpthread/uthread/uthread_create.c:230
        curthread = (struct pthread *) 0x0
        itimer = Cannot access memory at address 0x7cf
(gdb) 
(gdb) quit
The program is running.  Exit anyway? (y or n) y
Killed 
$ ^D

Script done on Sun Mar 28 19:31:06 2010

Reply via email to