Implement task priorities and message queues
This commit is contained in:
17
nserver.c
17
nserver.c
@ -43,8 +43,6 @@
|
||||
extern int openDevexecLog(); /* in devexec.c */
|
||||
|
||||
extern int NetWatchTask(void *pData); /* in nwatch.c */
|
||||
/* ========================= Less dreadful file statics =================== */
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
static void StopExit(void)
|
||||
{
|
||||
@ -116,13 +114,14 @@ int InitServer(char *file, pServer * pServ)
|
||||
assert(self->pSics);
|
||||
|
||||
/* initialise tasker */
|
||||
assert(TaskerInit(&self->pTasker));
|
||||
TaskerInit(&self->pTasker);
|
||||
assert(self->pTasker != NULL);
|
||||
|
||||
pSICSOptions = IFAddOption(pSICSOptions, "ConnectionCount", "0");
|
||||
pSICSOptions = IFAddOption(pSICSOptions, "ConMask", "0");
|
||||
|
||||
/* initialize the network watcher */
|
||||
TaskRegister(self->pTasker, NetWatchTask, NULL, NULL, NULL, 1);
|
||||
TaskRegisterN(self->pTasker, "nwatch", NetWatchTask, NULL, NULL, NULL, TASK_PRIO_HIGH);
|
||||
|
||||
/* initialise the server from script */
|
||||
SetWriteHistory(0);
|
||||
@ -183,7 +182,7 @@ int InitServer(char *file, pServer * pServ)
|
||||
iCommandTimeOut)) != NULL);
|
||||
TaskRegisterN(self->pTasker, "Network Reader",
|
||||
NetReaderTask, NetReaderSignal, NULL, /* call DeleteNetReader later than TaskerDelete */
|
||||
pReader, 1);
|
||||
pReader, TASK_PRIO_HIGH);
|
||||
self->pReader = pReader;
|
||||
|
||||
/* the socket */
|
||||
@ -245,17 +244,17 @@ int InitServer(char *file, pServer * pServ)
|
||||
/* install environment monitor */
|
||||
self->pMonitor = GetEnvMon(self->pSics);
|
||||
TaskRegisterN(self->pTasker,"EV Monitor",
|
||||
EnvMonTask, EnvMonSignal, NULL, self->pMonitor, 1);
|
||||
EnvMonTask, EnvMonSignal, NULL, self->pMonitor, TASK_PRIO_HIGH);
|
||||
|
||||
/* install performance monitor */
|
||||
pMon = CreatePerfMon(20);
|
||||
AddCommand(self->pSics, "Performance", PerfMonWrapper, DeletePerfMon,
|
||||
pMon);
|
||||
TaskRegisterN(self->pTasker,"perfmon", PerfMonTask, PerfMonSignal, NULL, pMon, 1);
|
||||
TaskRegisterN(self->pTasker,"perfmon", PerfMonTask, PerfMonSignal, NULL, pMon, TASK_PRIO_HIGH);
|
||||
/* Install a second one for higher granularity measurement */
|
||||
pMon = CreatePerfMon(2);
|
||||
TaskRegisterN(self->pTasker,"perfmon2",
|
||||
PerfMonTask, PerfMonSignal, DeletePerfMon, pMon, 1);
|
||||
PerfMonTask, PerfMonSignal, DeletePerfMon, pMon, TASK_PRIO_HIGH);
|
||||
|
||||
|
||||
/* install telnet port */
|
||||
@ -467,7 +466,7 @@ int UserWait(SConnection * pCon, SicsInterp * pSics, void *pData,
|
||||
|
||||
sWait.dFinish = DoubleTime() + (double)fVal;
|
||||
sWait.iEnd = 0;
|
||||
lID = TaskRegisterN(pTask,"wait", WaitTask, WaitSignal, NULL, &sWait, 1);
|
||||
lID = TaskRegisterN(pTask,"wait", WaitTask, WaitSignal, NULL, &sWait, TASK_PRIO_HIGH);
|
||||
TaskWait(pTask, lID); if (SCGetInterrupt(pCon) != eContinue) {
|
||||
return 0;
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user