Model can be run and stop

This commit is contained in:
Adrien Bourmault 2021-07-12 17:54:57 +02:00
parent 1d5463c1c5
commit 4c1763f6c4
No known key found for this signature in database
GPG Key ID: 6EB408FE0ACEC664
7 changed files with 59 additions and 28 deletions

View File

@ -161,6 +161,7 @@ struct {
int nmaxThread; int nmaxThread;
int nmaxCycles; int nmaxCycles;
int siteNumber; int siteNumber;
bool isRunning;
Scheduler_t *scheduler; Scheduler_t *scheduler;
Supervisor_t *supervisor; Supervisor_t *supervisor;
} typedef Model_t; } typedef Model_t;

View File

@ -33,11 +33,24 @@ void SchedInit(Scheduler_t *scheduler);
// -------------------------------------------------------------------------- // // -------------------------------------------------------------------------- //
static inline void SchedDestroy(Scheduler_t *scheduler) static inline void SchedDestroy(Scheduler_t *scheduler)
{ {
free(scheduler->globalDrawingSpace->space); if (scheduler) {
free(scheduler->globalDrawingSpace); if (scheduler->globalDrawingSpace) {
if (scheduler->globalDrawingSpace->space) {
free(scheduler->arrowArray->array); free(scheduler->globalDrawingSpace->space);
free(scheduler->arrowArray); scheduler->globalDrawingSpace->space = NULL;
}
free(scheduler->globalDrawingSpace);
scheduler->globalDrawingSpace = NULL;
}
if (scheduler->arrowArray) {
if (scheduler->arrowArray->array) {
free(scheduler->arrowArray->array);
scheduler->arrowArray->array = NULL;
}
free(scheduler->arrowArray);
scheduler->arrowArray = NULL;
}
}
} }
// -------------------------------------------------------------------------- // // -------------------------------------------------------------------------- //

View File

@ -104,7 +104,7 @@ void connectedCommunication(int sockfd)
curLineLength = 0; curLineLength = 0;
continueReadLine = 1; continueReadLine = 1;
historyModifier = -1; historyModifier = -1;
while (continueReadLine && (curChar = getch())) { while (continueReadLine && (curChar = getch())) { //TODO empty line in history
switch (curChar) { switch (curChar) {

View File

@ -53,6 +53,7 @@ int main(int argc, char **argv)
ServerDestroy(server0); ServerDestroy(server0);
ModelSystemDestroy(); ModelSystemDestroy();
free(server0); free(server0);
server0 = NULL;
return returnValue; return returnValue;
} }

View File

@ -102,22 +102,6 @@ int ModelLoad(int id) // TODO unload !
// Creating structure for the Scheduler // Creating structure for the Scheduler
knownModel[id-1]->scheduler = (Scheduler_t*) calloc(1, sizeof(Scheduler_t)); knownModel[id-1]->scheduler = (Scheduler_t*) calloc(1, sizeof(Scheduler_t));
knownModel[id-1]->scheduler->globalDrawingSpace =
(Space_t*) calloc(1, sizeof(Space_t)); // TODO free this
knownModel[id-1]->scheduler->nMaxThread = knownModel[id-1]->nmaxThread;
knownModel[id-1]->scheduler->nMaxCycles = knownModel[id-1]->nmaxCycles;
// Preparing global drawing space
ModelPrepareSpace(knownModel[id-1]->scheduler->globalDrawingSpace,
knownModel[id-1]);
knownModel[id-1]->scheduler->arrowArray =
(ArrowArray_t*) calloc(1, sizeof(ArrowArray_t)); // TODO free this
ModelPrepareArrows(knownModel[id-1]->scheduler->globalDrawingSpace,
knownModel[id-1]->scheduler->arrowArray, knownModel[id-1]);
loadedModel = loadedModel =
(Model_t**) realloc(loadedModel, ++loadedModelSize * sizeof(Model_t*)); (Model_t**) realloc(loadedModel, ++loadedModelSize * sizeof(Model_t*));
@ -129,14 +113,37 @@ int ModelLoad(int id) // TODO unload !
int ModelRun(int id) int ModelRun(int id)
{ {
if (id <= 0 || id > loadedModelSize) { if (id <= 0 || id > loadedModelSize)
return 0; return 0;
}
if (!loadedModel[id-1]->scheduler) { if (!loadedModel[id-1]->scheduler)
return 0; return 0;
}
if (loadedModel[id-1]->isRunning)
return 0;
loadedModel[id-1]->scheduler->globalDrawingSpace =
(Space_t*) calloc(1, sizeof(Space_t)); // TODO free this
loadedModel[id-1]->scheduler->nMaxThread = knownModel[id-1]->nmaxThread;
loadedModel[id-1]->scheduler->nMaxCycles = knownModel[id-1]->nmaxCycles;
// Preparing global drawing space
ModelPrepareSpace(loadedModel[id-1]->scheduler->globalDrawingSpace,
loadedModel[id-1]);
loadedModel[id-1]->scheduler->arrowArray =
(ArrowArray_t*) calloc(1, sizeof(ArrowArray_t)); // TODO free this
ModelPrepareArrows(loadedModel[id-1]->scheduler->globalDrawingSpace,
loadedModel[id-1]->scheduler->arrowArray,
loadedModel[id-1]);
loadedModel[id-1]->scheduler->pleaseStop = false;
loadedModel[id-1]->isRunning = true;
SchedInit(loadedModel[id-1]->scheduler); SchedInit(loadedModel[id-1]->scheduler);
printLog("Model %d launched\n", id); printLog("Model %d launched\n", id);
return 1; return 1;
} }
@ -156,14 +163,16 @@ int ModelStop(int id)
SchedWait(loadedModel[id-1]->scheduler); SchedWait(loadedModel[id-1]->scheduler);
SchedDestroy(loadedModel[id-1]->scheduler); SchedDestroy(loadedModel[id-1]->scheduler);
loadedModel[id-1]->scheduler->pleaseStop = false; loadedModel[id-1]->isRunning = false;
return 1; return 1;
} }
void ModelDelete(int id) void ModelDelete(int id)
{ {
free(knownModel[id]->name); free(knownModel[id]->name);
knownModel[id]->name = NULL;
free(knownModel[id]); free(knownModel[id]);
knownModel[id] = NULL;
} }
void ModelShutdown(void) void ModelShutdown(void)
@ -190,7 +199,9 @@ void ModelSystemDestroy(void)
ModelDelete(i); ModelDelete(i);
} }
free(loadedModel); free(loadedModel);
loadedModel = NULL;
free(knownModel); free(knownModel);
knownModel = NULL;
} }
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */

View File

@ -57,6 +57,7 @@ static Center_t *findWorkArea(Center_t *centersList, Arrow_t *electedArrow,
|| (zmax && (abs(electedArrow->z - currentCenter->z) <= ruleRadius)) || (zmax && (abs(electedArrow->z - currentCenter->z) <= ruleRadius))
){ ){
free(newCenter); free(newCenter);
newCenter = NULL;
//printLog("Can't find a free area\n"); //printLog("Can't find a free area\n");
return NULL; return NULL;
} }
@ -213,7 +214,9 @@ static void *schedulerMain(void *scheduler)
printLog("Scheduler #%lu offline\n", args->id); printLog("Scheduler #%lu offline\n", args->id);
free(workerArray); free(workerArray);
workerArray = NULL;
free(centersList); free(centersList);
centersList = NULL;
return NULL; return NULL;
} }

View File

@ -112,8 +112,10 @@ void *serverCommunicationInstance(void *server)
} }
close(args->sockfd); close(args->sockfd);
if (argv) if (argv) {
free(argv); free(argv);
argv = NULL;
}
printLog("Disconnected from %s:%d\n", clientIP, clientPort); printLog("Disconnected from %s:%d\n", clientIP, clientPort);
return NULL; return NULL;
} }