- fixed problems deallocation sicsobjects

This commit is contained in:
zolliker
2009-02-25 14:50:00 +00:00
parent 1914d04420
commit 4b82f13ab1
7 changed files with 47 additions and 48 deletions

View File

@ -27,7 +27,6 @@ struct DevSer {
DevAction *toKill; /* list of actions to be killed */
SchedHeader *headers;
int steps;
int stopTask;
};
static char *devPrio[NumberOfPRIO] = {
@ -58,23 +57,14 @@ static void DevFreeActionList(DevAction * actions)
while (actions != NULL) {
victim = actions;
actions = victim->next;
assert(victim->data != NULL);
if (victim->kill != NULL)
victim->kill(victim->data);
victim->data=NULL;
free(victim);
}
}
static void DevKillTask(void *ds)
{
DevSer *devser = ds;
if (devser->stopTask) {
free(devser);
} else {
devser->stopTask = 1;
}
}
DevAction *DevNextAction(DevSer * devser)
{
DevPrio prio;
@ -130,9 +120,6 @@ int DevQueueTask(void *ds)
if (devser->steps == 0)
return 1;
if (devser->stopTask) {
return 0;
}
/* deferred deallocation of removed actions */
DevFreeActionList(devser->toKill);
@ -188,10 +175,9 @@ DevSer *DevMake(SConnection * con, int argc, char *argv[])
devser->killCurrent = 0;
devser->actions = NULL;
devser->headers = NULL;
devser->stopTask = 0;
devser->toKill = NULL;
devser->steps = -1; /* no debugging by default */
TaskRegister(pServ->pTasker, DevQueueTask, NULL, DevKillTask, devser, 0);
TaskRegister(pServ->pTasker, DevQueueTask, NULL, NULL, devser, 0);
return devser;
}
@ -235,11 +221,8 @@ void DevKill(DevSer * devser)
devser->killCurrent = 0;
free(devser->current);
}
if (devser->stopTask) {
free(devser);
} else {
devser->stopTask = 1;
}
TaskRemove(pServ->pTasker, DevQueueTask, devser);
free(devser);
}
void DevDisconnect(DevSer * devser)