NSConsumerThread * thread = NSThreadInit(NSConsumerMsgPushThreadFunc, (void *) task);
NS_VERIFY_NOT_NULL(thread, NS_ERROR);
+ NSDestroyThreadHandle(thread);
+
return NS_OK;
}
void * NSConsumerMsgPushThreadFunc(void * data)
{
+ NSThreadDetach();
+
NSConsumerQueueObject * obj = NULL;
NSConsumerQueue * queue = NULL;
NS_LOG(DEBUG, "get queueThread handle");
NSConsumerThread * msgHandleThread = *(NSGetMsgHandleThreadHandle());
- NS_VERIFY_NOT_NULL(msgHandleThread, NULL);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(msgHandleThread, NULL, NSOICFree(data));
NS_LOG(DEBUG, "create queue object");
obj = (NSConsumerQueueObject *)OICMalloc(sizeof(NSConsumerQueueObject));
- NS_VERIFY_NOT_NULL(obj, NULL);
+ NS_VERIFY_NOT_NULL_WITH_POST_CLEANING(obj, NULL, NSOICFree(data));
obj->data = data;
obj->next = NULL;
static pthread_mutex_t g_create_mutex;
-void NSDestroyThreadHandle(NSConsumerThread *);
-
NSConsumerThread * NSThreadInit(NSThreadFunc func, void * data)
{
NS_VERIFY_NOT_NULL(func, NULL);
void NSThreadStop(NSConsumerThread * handle)
{
+ handle->isStarted = false;
+ NSThreadJoin(handle);
+
NSDestroyThreadHandle(handle);
}
void NSDestroyThreadHandle(NSConsumerThread * handle)
{
- handle->isStarted = false;
-
- NSThreadJoin(handle);
-
pthread_mutex_destroy(&(handle->mutex));
pthread_mutexattr_destroy(&(handle->mutex_attr));
pthread_mutex_unlock(&g_create_mutex);
}
+void NSThreadDetach()
+{
+ pthread_detach(pthread_self());
+}