- fixed problems deallocation sicsobjects
This commit is contained in:
27
devser.c
27
devser.c
@ -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)
|
||||
|
Reference in New Issue
Block a user