[Vortex] closing a channel in the on_channel_created callback
Francis Brosnan Blazquez
francis at aspl.es
Mon Mar 31 11:04:45 CEST 2008
> Hi,
Hi Dexter,
> I was wondering if it is allowed to close the channel right in the
> on_channel_created callback. If it is, then maybe there's a race cond
> somewhere, because my program sometimes (not always) segfaults, here's
> the backtrace:
>
> #0 0xb6dfe550 in pthread_mutex_lock () from
> /lib/tls/i686/cmov/libpthread.so.0
> #1 0xb6fce9f1 in vortex_mutex_lock (mutex_def=0x7854) at
> vortex_thread.c:297
> #2 0xb6fbf22c in vortex_hash_lookup (hash_table=0x1, key=0xb6fd4d6d) at
> vortex_hash.c:248
> #3 0xb6fb5b5f in vortex_channel_get_data (channel=0x80d81e8,
> key=0xb6fd4d6d) at vortex_channel.c:3200
> #4 0xb6fb5dbb in vortex_channel_have_piggyback (channel=0x80d81e8) at
> vortex_channel.c:5935
> #5 0xb6fba892 in __vortex_channel_new (data=0x80d84b8) at
> vortex_channel.c:867
> #6 0xb6fc0eed in __vortex_thread_pool_dispatcher (data=0x80c00b8) at
> vortex_thread_pool.c:101
> #7 0xb6dfc46b in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
> #8 0xb6bbd6de in clone () from /lib/tls/i686/cmov/libc.so.6
>
> as we can see the hash_table (channel->data) has already been freed, but
> it is not NULL so in vortex_hash_lookup checking hash_table against NULL
> is no use.
>
> But.. if it is not allowed to close channel in that callback, how can I
> do that? Because I don't need that channel anymore, I was just using
> this vortex_channel_new to check if the connection is still alive, so
> when I got the channel I know that the connection is ok, and I just
> close it.
I wasn't able to reproduce the bug. In fact channel create notification
is protected by two channel_ref/unref instructions to avoid race
conditions. Which version are you using?
In any case, as points Jens, it is preferred to create a
"keep-alive-check" channel sending data rather than creating a channel.
This is because creating a channel blocks the session channel 0 which is
not interesting. With the alternative you can run your checks and other
parallel operations at the same time.
Cheers!
--
Francis Brosnan Blazquez <francis at aspl.es>
Advanced Software Production Line, S.L.
More information about the Vortex
mailing list