-
Notifications
You must be signed in to change notification settings - Fork 8
Description
The use of cci_reject with sock leads to either a deadlock or a segfault. The same code works fine with verbs.
Here is a stack trace when it segfault (it doesn't always segfault, sometimes it just deadlock).
#0 0x00007f82f945da26 in sock_progress_queued (ep=0xa636a0)
at ../../../../../trunk/src/plugins/ctp/sock/ctp_sock_api.c:2218
#1 0x00007f82f945dd55 in sock_progress_sends (ep=0xa636a0)
at ../../../../../trunk/src/plugins/ctp/sock/ctp_sock_api.c:2419
#2 0x00007f82f946571f in sock_progress_thread (arg=0xa636a0)
at ../../../../../trunk/src/plugins/ctp/sock/ctp_sock_api.c:4940
#3 0x00007f82ffa91b50 in start_thread (arg=) at pthread_create.c:304
Digging deeper in the core, I think I identified the issue. When the rx (type cci_event_connect_request_t) event is created it is correctly initialized. On the cci_reject call, as no connection exists yet the newly created tx event is tagged with a connection set to NULL. If this event end up in the queues and gets processes later on by sock_progress_queued, the NULL connections is just asking for troubles.