[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] A small issue with multiple xs_daemon_open



Hello,
I am experiencing a problem when opening two simultaneous connections (in a
single process) to xenstored via xs_daemon_open(). I would think such
an operation is supported and should work (no static variables in
libxenstore are involved); is it a correct assumption ? If so, the issue 
should be fixed.

The environment is xen-3.4.3, 2.6.32.9-xxx pvops dom0. The order of
operations is
xs1=xs_daemon_open()
xs_watch(xs1,...)
xs_read_watch(xs1,...)
xs2=xs_daemon_open()
xs_read(xs2,...)
xs_daemon_close(xs2)
xs_read(xs1,...)
xs_daemon_close(xs1)

There seems to be some sort of a race when calling the second 
xs_daemon_close() - sometimes it hangs infinitely. Backtrace:
(gdb) info threads
  2 Thread 0x7fe64697c710 (LWP 4154)  0x00007fe646b8dc44 in __lll_lock_wait()
   from /lib64/libpthread.so.0
* 1 Thread 0x7fe6482d2700 (LWP 4153)  0x00007fe646b87bfd in pthread_join ()
   from /lib64/libpthread.so.0
(gdb) bt
#0  0x00007fe646b87bfd in pthread_join () from /lib64/libpthread.so.0
#1  0x00007fe647776fdc in xs_daemon_close () from /usr/lib64/libxenstore.so.3.0
#2  0x000000000040660a in peer_client_init ()
#3  0x0000000000405808 in main ()
(gdb) thread 2 
[Switching to thread 2 (Thread 0x7fe64697c710 (LWP 4154))]#0
0x00007fe646b8dc44 in __lll_lock_wait ()
   from /lib64/libpthread.so.0
(gdb) bt
#0  0x00007fe646b8dc44 in __lll_lock_wait () from /lib64/libpthread.so.0
#1  0x00007fe646b88f15 in _L_lock_1017 () from /lib64/libpthread.so.0
#2  0x00007fe646b88de7 in pthread_mutex_lock () from /lib64/libpthread.so.0
#3  0x00007fe647775db8 in ?? () from /usr/lib64/libxenstore.so.3.0
#4  0x00007fe647775e3c in ?? () from /usr/lib64/libxenstore.so.3.0
#5  0x00007fe646b86a3a in start_thread () from /lib64/libpthread.so.0
#6  0x00007fe64729967d in clone () from /lib64/libc.so.6
#7  0x0000000000000000 in ?? ()
(gdb) 

You can see the code for peer_client_init() at
http://qubes-os.org/gitweb/?p=rafal/gui.git;a=blob;f=gui-common/txrx-vchan.c;h=afc691e922edce61683e46203fd9597d029052d3;hb=93f0509b791f8fc433675c58c81f6ea9469d2c91#l168
it calls libvchan_client_init, code at
http://qubes-os.org/gitweb/?p=rafal/gui.git;a=blob;f=vchan/vchan/init.c;h=4a3da4f22907445160a6fe3db9ed357f89ebc301;hb=93f0509b791f8fc433675c58c81f6ea9469d2c91#l212
note that libvchan_client_init calls xs_daemon_open/close by itself, too.

Naturally it is posible to change peer_client_init() to not call 
xs_daemon_open twice, but the title issue itself remains.

Regards,
Rafal Wojtczuk
Principal Researcher
Invisible Things Lab, Qubes-os project

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.