void mal_factory_reset(void) { Plant pl, plim; plim = plants + lastPlant; for (pl = plants; pl < plim; pl++){ /* MSresetVariables(mb, pl->stk, 0);*/ /* freeStack(pl->stk); there may be a reference?*/ /* we are inside the body of the factory and about to return */ if (pl->stk) { pl->stk->keepAlive = FALSE; garbageCollector(NULL, pl->factory, pl->stk, TRUE); GDKfree(pl->stk); } pl->factory = 0; pl->stk=0; pl->pc = 0; pl->inuse = 0; pl->client = NULL; pl->caller = NULL; pl->pci = NULL; pl->env = NULL; pl->client = NULL; pl->caller = NULL; pl->env= NULL; pl->pci = NULL; } plantId = 1; lastPlant = 0; }
str shutdownFactory(Client cntxt, MalBlkPtr mb) { Plant pl, plim; plim = plants + lastPlant; for (pl = plants; pl < plim; pl++) if (pl->factory == mb) { /* MSresetVariables(mb, pl->stk, 0);*/ /* freeStack(pl->stk); there may be a reference?*/ /* we are inside the body of the factory and about to return */ pl->factory = 0; if (pl->stk) pl->stk->keepAlive = FALSE; if ( pl->stk) { garbageCollector(cntxt, mb, pl->stk,TRUE); GDKfree(pl->stk); } pl->stk=0; pl->pc = 0; pl->inuse = 0; pl->client = NULL; pl->caller = NULL; pl->pci = NULL; pl->env = NULL; pl->client = NULL; pl->caller = NULL; pl->env= NULL; pl->pci = NULL; } return MAL_SUCCEED; }
/** * Main procedure * @param argc * @param argv * @return */ int main(int argc, char *argv[]) { /* Start process... */ xbt_dynar_t dax = initDynamicThrottling(&argc, argv); // Free memory garbageCollector(dax); return 0; }
str MALexitClient(Client c) { if (c->glb && c->curprg->def->errors == 0) garbageCollector(c, c->curprg->def, c->glb, TRUE); if (c->bak) return NULL; c->mode = FINISHCLIENT; return NULL; }
void loop() { if (Serial.available() > 0) { char messageType = Serial.read(); //Serial.print( messageType ); switch( messageType ) { case ADD_REQUEST: int amount1; int amount2; char* encodedMessage; AutoFree garbageCollector( encodedMessage = readBuffer() ); sscanf( encodedMessage, "%d,%d", &amount1, &amount2 ); int result = amount1 + amount2; char encodedResult[100]; sprintf( encodedResult, "S%d", result ); Serial.print( encodedResult ); Serial.print( '\0' ); break; } } //delay( 100 ); }
/* * Execution of the SQL program is delegated to the MALengine. * Different cases should be distinguished. The default is to * hand over the MAL block derived by the parser for execution. * However, when we received an Execute call, we make a shortcut * and prepare the stack for immediate execution */ str SQLexecutePrepared(Client c, backend *be, cq *q) { mvc *m = be->mvc; int argc, parc; ValPtr *argv, argvbuffer[MAXARG], v; ValRecord *argrec, argrecbuffer[MAXARG]; MalBlkPtr mb; MalStkPtr glb; InstrPtr pci; int i; str ret; Symbol qcode = q->code; if (!qcode || qcode->def->errors) { if (!qcode && *m->errstr) return createException(PARSE, "SQLparser", "%s", m->errstr); throw(SQL, "SQLengine", "39000!program contains errors"); } mb = qcode->def; pci = getInstrPtr(mb, 0); if (pci->argc >= MAXARG) argv = (ValPtr *) GDKmalloc(sizeof(ValPtr) * pci->argc); else argv = argvbuffer; if (pci->retc >= MAXARG) argrec = (ValRecord *) GDKmalloc(sizeof(ValRecord) * pci->retc); else argrec = argrecbuffer; /* prepare the target variables */ for (i = 0; i < pci->retc; i++) { argv[i] = argrec + i; argv[i]->vtype = getVarGDKType(mb, i); } argc = m->argc; parc = q->paramlen; if (argc != parc) { if (pci->argc >= MAXARG) GDKfree(argv); if (pci->retc >= MAXARG) GDKfree(argrec); throw(SQL, "sql.prepare", "07001!EXEC: wrong number of arguments for prepared statement: %d, expected %d", argc, parc); } else { for (i = 0; i < m->argc; i++) { atom *arg = m->args[i]; sql_subtype *pt = q->params + i; if (!atom_cast(arg, pt)) { /*sql_error(c, 003, buf); */ if (pci->argc >= MAXARG) GDKfree(argv); if (pci->retc >= MAXARG) GDKfree(argrec); throw(SQL, "sql.prepare", "07001!EXEC: wrong type for argument %d of " "prepared statement: %s, expected %s", i + 1, atom_type(arg)->type->sqlname, pt->type->sqlname); } argv[pci->retc + i] = &arg->data; } } glb = (MalStkPtr) (q->stk); ret = callMAL(c, mb, &glb, argv, (m->emod & mod_debug ? 'n' : 0)); /* cleanup the arguments */ for (i = pci->retc; i < pci->argc; i++) { garbageElement(c, v = &glb->stk[pci->argv[i]]); v->vtype = TYPE_int; v->val.ival = int_nil; } if (glb && ret) /* error */ garbageCollector(c, mb, glb, glb != 0); q->stk = (backend_stack) glb; if (glb && SQLdebug & 1) printStack(GDKstdout, mb, glb); if (pci->argc >= MAXARG) GDKfree(argv); if (pci->retc >= MAXARG) GDKfree(argrec); return ret; }