/* Load and initialize ESP module. Manually loaded when used inside esp.c. */ PUBLIC int espOpen(MprModule *module) { HttpStage *handler; if ((handler = httpCreateHandler("espHandler", module)) == 0) { return MPR_ERR_CANT_CREATE; } HTTP->espHandler = handler; handler->open = openEsp; handler->close = closeEsp; handler->start = startEsp; /* Using the standard 'incoming' callback that simply transfers input to the queue head Applications should read by defining a notifier for READABLE events and then calling httpGetPacket on the read queue. */ if ((esp = mprAllocObj(Esp, manageEsp)) == 0) { return MPR_ERR_MEMORY; } MPR->espService = esp; handler->stageData = esp; esp->mutex = mprCreateLock(); esp->local = mprCreateThreadLocal(); if (espInitParser() < 0) { return 0; } if ((esp->ediService = ediCreateService()) == 0) { return 0; } #if ME_COM_MDB mdbInit(); #endif #if ME_COM_SQLITE sdbInit(); #endif if (module) { mprSetModuleFinalizer(module, unloadEsp); } return 0; }
int mal_init(void){ #ifdef NEED_MT_LOCK_INIT MT_lock_init( &mal_contextLock, "mal_contextLock"); MT_lock_init( &mal_namespaceLock, "mal_namespaceLock"); MT_lock_init( &mal_remoteLock, "mal_remoteLock"); MT_lock_init( &mal_profileLock, "mal_profileLock"); MT_lock_init( &mal_copyLock, "mal_copyLock"); MT_lock_init( &mal_delayLock, "mal_delayLock"); #endif /* "/2" is arbitrarily used / chosen, as on systems with * hyper-threading enabled, using all hardware threads rather than * "only" all physical cores does not necessarily yield a linear * performance benefit */ MT_sema_init( &mal_parallelism, (GDKnr_threads > 1 ? GDKnr_threads/2: 1), "mal_parallelism"); tstAligned(); MCinit(); if (mdbInit()) return -1; if (monet_memory == 0) monet_memory = MT_npages() * MT_pagesize(); initNamespace(); initParser(); initHeartbeat(); initResource(); #ifdef HAVE_JSONSTORE startHttpdaemon(); #endif RECYCLEinit(); if( malBootstrap() == 0) return -1; /* set up the profiler if needed, output sent to console */ /* Use the same shortcuts as stethoscope */ if ( mal_trace && *mal_trace) { char *s; setFilterAll(); openProfilerStream(mal_clients[0].fdout); for ( s= mal_trace; *s; s++) switch(*s){ case 'a': activateCounter("aggregate");break; case 'b': activateCounter("rbytes"); activateCounter("wbytes");break; case 'c': activateCounter("cpu");break; case 'e': activateCounter("event");break; case 'f': activateCounter("function");break; case 'i': activateCounter("pc");break; case 'm': activateCounter("memory");break; case 'p': activateCounter("process");break; case 'r': activateCounter("reads");break; case 's': activateCounter("stmt");break; case 't': activateCounter("ticks");break; case 'u': activateCounter("user");break; case 'w': activateCounter("writes");break; case 'y': activateCounter("type");break; case 'D': activateCounter("dot");break; case 'I': activateCounter("thread");break; case 'T': activateCounter("time");break; case 'S': activateCounter("start"); } startProfiling(); } else mal_trace =0; return 0; }