d_groupCreationQueue d_groupCreationQueueNew( d_admin admin) { d_groupCreationQueue queue; os_result osr; os_threadAttr attr; assert(admin); queue = d_groupCreationQueue(os_malloc(C_SIZEOF(d_groupCreationQueue))); if(queue) { d_lockInit(d_lock(queue), D_GROUP_CREATION_QUEUE, d_groupCreationQueueDeinit); if(queue) { queue->groups = c_iterNew(NULL); queue->terminate = FALSE; queue->admin = admin; queue->groupsToCreateVolatile = 0; queue->groupsToCreateTransient = 0; queue->groupsToCreatePersistent = 0; osr = os_threadAttrInit(&attr); if(osr == os_resultSuccess) { osr = os_threadCreate(&queue->actionThread, "groupCreationThread", &attr, (void*(*)(void*))d_groupCreationQueueRun, (void*)queue); if(osr != os_resultSuccess) { d_groupCreationQueueFree(queue); queue = NULL; } } else { d_groupCreationQueueFree(queue); queue = NULL; } } } return queue; }
c_bool d_groupRemoteListenerStop( d_groupRemoteListener listener) { c_bool result; result = d_readerListenerStop(d_readerListener(listener)); d_groupCreationQueueFree(listener->groupCreationQueue); return result; }