/* Two threads and two mutexes are initially created */ int class_thread_create(class_thread_t * cthread, void *(*start)(void *), void * arg, int * num_of_mutexes) { pthread_t temp_pthread; if(pthread_create(&temp_pthread, NULL, start, arg)) { fprintf(stderr, "Error: Failed to create pthread!\n"); return -1; } //Hacking a bit to get everything working correctly memcpy(cthread, &temp_pthread, sizeof(pthread_t)); printf("THREAD ID CREATE = %d\n", (int) temp_pthread); init_thread_monitor(temp_pthread); return 0; }
nsresult PeerConnectionCtx::InitializeGlobal(nsIThread *mainThread, nsIEventTarget* stsThread) { if (!gMainThread) { gMainThread = mainThread; CSF::VcmSIPCCBinding::setMainThread(gMainThread); init_thread_monitor(&thread_ended_dispatcher, &join_waiter); } else { #ifdef MOZILLA_INTERNAL_API MOZ_ASSERT(gMainThread == mainThread); #endif } CSF::VcmSIPCCBinding::setSTSThread(stsThread); nsresult res; #ifdef MOZILLA_INTERNAL_API // This check fails on the unit tests because they do not // have the right thread behavior. bool on; res = gMainThread->IsOnCurrentThread(&on); NS_ENSURE_SUCCESS(res, res); MOZ_ASSERT(on); #endif if (!gInstance) { CSFLogDebug(logTag, "Creating PeerConnectionCtx"); PeerConnectionCtx *ctx = new PeerConnectionCtx(); res = ctx->Initialize(); PR_ASSERT(NS_SUCCEEDED(res)); if (!NS_SUCCEEDED(res)) return res; gInstance = ctx; if (!sipcc::PeerConnectionCtx::gPeerConnectionCtxShutdown) { sipcc::PeerConnectionCtx::gPeerConnectionCtxShutdown = new PeerConnectionCtxShutdown(); sipcc::PeerConnectionCtx::gPeerConnectionCtxShutdown->Init(); } } return NS_OK; }