simplified the memory management
This commit is contained in:
@@ -1074,6 +1074,7 @@ struct nn_Computer {
|
||||
nn_Universe *universe;
|
||||
nn_Environment env;
|
||||
nn_Lock *lock;
|
||||
nn_refc_t refc;
|
||||
void *userdata;
|
||||
char *address;
|
||||
char *tmpaddress;
|
||||
@@ -1176,6 +1177,7 @@ nn_Computer *nn_createComputer(nn_Universe *universe, void *userdata, const char
|
||||
c->state = NN_BOOTUP;
|
||||
c->universe = universe;
|
||||
c->userdata = userdata;
|
||||
c->refc = 1;
|
||||
|
||||
c->lock = nn_createLock(ctx);
|
||||
if(c->lock == NULL) {
|
||||
@@ -1233,6 +1235,14 @@ nn_Computer *nn_createComputer(nn_Universe *universe, void *userdata, const char
|
||||
return c;
|
||||
}
|
||||
|
||||
void nn_retainComputer(nn_Computer *computer) {
|
||||
nn_retainComputerN(computer, 1);
|
||||
}
|
||||
|
||||
void nn_retainComputerN(nn_Computer *computer, size_t n) {
|
||||
nn_incRef(&computer->refc, n);
|
||||
}
|
||||
|
||||
void nn_lockComputer(nn_Computer *computer) {
|
||||
nn_lock(&computer->universe->ctx, computer->lock);
|
||||
}
|
||||
@@ -1441,6 +1451,11 @@ void nn_beepComputerMorse(nn_Computer *computer, nn_MorseBeep beep) {
|
||||
}
|
||||
|
||||
void nn_destroyComputer(nn_Computer *computer) {
|
||||
nn_destroyComputerN(computer, 1);
|
||||
}
|
||||
|
||||
void nn_destroyComputerN(nn_Computer *computer, size_t n) {
|
||||
if(!nn_decRef(&computer->refc, n)) return;
|
||||
nn_Context *ctx = &computer->universe->ctx;
|
||||
nn_stopComputer(computer);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user