int tnet_transport_stop(tnet_transport_t *transport) { int ret; transport_context_t *context; if(!transport) { return -1; } context = transport->context; if((ret = tsk_runnable_stop(TSK_RUNNABLE(transport)))) { return ret; } if(context) { static char c = '\0'; // signal tsk_safeobj_lock(context); // =>MUST if(tnet_transport_have_socket(transport, context->pipeR)) { // to avoid SIGPIPE=> check that there is at least one reader write(context->pipeW, &c, 1); } tsk_safeobj_unlock(context); } if(transport->mainThreadId[0]) { return tsk_thread_join(transport->mainThreadId); } else { /* already soppped */ return 0; } }
int tnet_transport_stop(tnet_transport_t *transport) { int ret; transport_context_t *context; if (!transport) { return -1; } context = transport->context; if ((ret = tsk_runnable_stop(TSK_RUNNABLE(transport)))) { return ret; } if(transport->mainThreadId[0]){ if (context && context->cf_run_loop) { // Signal the run-loop CFRunLoopWakeUp(context->cf_run_loop); } return tsk_thread_join(transport->mainThreadId); } else { // already stopped return 0; } }
static tsk_object_t* tdav_runnable_video_dtor(tsk_object_t * self) { tdav_runnable_video_t *runnable = self; if(runnable){ tsk_runnable_stop(TSK_RUNNABLE(runnable)); } return self; }
int tdav_runnable_video_stop(tdav_runnable_video_t* self) { if(!self){ TSK_DEBUG_ERROR("Invalid parameter"); return -1; } return tsk_runnable_stop(TSK_RUNNABLE(self)); }
/*=== stop all threads */ int tnet_transport_stop(tnet_transport_t *transport) { int ret; if ((ret = tsk_runnable_stop(TSK_RUNNABLE(transport)))) { return ret; } if (transport->mainThreadId[0]) { WSASetEvent(((transport_context_t*)(transport->context))->events[0]); return tsk_thread_join(transport->mainThreadId); } else { /* already stoppped */ return 0; } }