static void DaoCallServer_Add( DaoTaskEvent *event ) { DaoCallServer *server = daoCallServer; DMutex_Lock( & server->mutex ); DaoCallServer_AddEvent( event ); DCondVar_Signal( & server->condv ); DMutex_Unlock( & server->mutex ); DaoCallServer_TryAddThread( NULL, NULL, server->pending->size ); }
void DaoCallServer_AddTask( DThreadTask func, void *param, int now ) { int scheduled = 0; DaoCallServer *server = DaoCallServer_TryInit( mainVmSpace ); DMutex_Lock( & server->mutex ); if( server->idle > server->parameters->size || now == 0 ){ scheduled = 1; DList_Append( server->functions, func ); DList_Append( server->parameters, param ); DMap_Insert( server->pending, param, NULL ); DCondVar_Signal( & server->condv ); } DMutex_Unlock( & server->mutex ); if( scheduled ){ if( now == 0 ) DaoCallServer_TryAddThread( NULL, NULL, server->parameters->size ); }else{ DaoCallServer_AddThread( func, param ); } }