chore: Cleanup module_database_dd

main
Sean McBride 4 years ago
parent c1663f59ac
commit 019130b43c

@ -16,11 +16,31 @@ extern int module_database_free_offset;
static inline int static inline int
module_database_add(struct module *module) module_database_add(struct module *module)
{ {
/*
* Assumption: Module is added to database before being listened to
* TODO: Why does this matter?
*/
assert(module->socket_descriptor == -1); assert(module->socket_descriptor == -1);
int rc;
if (module_database_free_offset >= MODULE_MAX_MODULE_COUNT) goto err_no_space;
int f = __sync_fetch_and_add(&module_database_free_offset, 1); int f = __sync_fetch_and_add(&module_database_free_offset, 1);
if (module_database_free_offset > MODULE_MAX_MODULE_COUNT) {
__sync_fetch_and_subtract(&module_database_free_offset, 1);
goto err_no_space;
}
if (module_database_free_offset == MODULE_MAX_MODULE_COUNT) goto err_no_space;
assert(f < MODULE_MAX_MODULE_COUNT); assert(f < MODULE_MAX_MODULE_COUNT);
module_database[f] = module; module_database[f] = module;
return 0; rc = 0;
done:
return rc;
err_no_space:
debuglog("Cannot add module. Database is full.\n");
rc = -1;
goto done;
} }

Loading…
Cancel
Save