I have a libuv event loop running in a background thread, it's reading from 
stdin and filling a buffer read by the main thread.

There's an 'exit' function called by the main thread that does some cleanup 
including these lines:

    /* stop libuv loop */
    uv_async_send(&stop_loop_async);
    /* wait for the event loop thread */
    uv_thread_join(&io_thread);

The 'stop_loop_async' is configured to call a function that will call 
'uv_stop' on the background thread. That wont work when libuv is polling 
for data and the program will block forever in `uv_thread_join`. Here's the 
backtrace of the hanging program:

thread 1:

#0  0xb77a4424 in __kernel_vsyscall ()
#1  0xb7751e1c in pthread_join (threadid=3073854272, thread_return=0x0) at 
pthread_join.c:89
#2  0x081fc309 in uv_thread_join (tid=0x826b5a0) at src/unix/thread.c:35

thread 2(the event loop thread):

#0  0xb77a4424 in __kernel_vsyscall ()
#1  0xb77579db in read () at ../sysdeps/unix/syscall-template.S:82
#2  0x081fa4c3 in read (__nbytes=<optimized out>, __buf=<optimized out>, 
__fd=<optimized out>) at /usr/include/i386-linux-gnu/bits/unistd.h:45
#3  uv__read (stream=0x826b680) at src/unix/stream.c:1001
#4  uv__stream_io (loop=0xb6a00468, w=0x826b6b8, events=1) at 
src/unix/stream.c:1146
#5  0x081ff35e in uv__io_poll (loop=0xb6a00468, timeout=-1) at 
src/unix/linux-core.c:271
#6  0x081f6252 in uv_run (loop=0xb6a00468, mode=UV_RUN_DEFAULT) at 
src/unix/core.c:284

The libuv version is 0.11.19 and operating system is linux 32 bits.

What would be the best way to deal with the problem?

-- 
You received this message because you are subscribed to the Google Groups 
"libuv" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/libuv.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to