Revert "automatically resolve existing symbols upon reload."

This isn't ready yet.
This commit is contained in:
Joris Vink 2017-08-31 17:11:24 +02:00
parent ed4ef22f1b
commit 2eab2f1ed7
6 changed files with 33 additions and 62 deletions

View File

@ -625,9 +625,6 @@ int kore_module_handler_new(const char *, const char *,
const char *, const char *, int);
void kore_module_handler_free(struct kore_module_handle *);
void kore_runtime_init(void);
void kore_runtime_reload(void);
void kore_runtime_cleanup(void);
struct kore_runtime_call *kore_runtime_getcall(const char *);
void kore_runtime_execute(struct kore_runtime_call *);
@ -651,6 +648,7 @@ struct kore_module_handle *kore_module_handler_find(const char *,
#if !defined(KORE_NO_HTTP)
void kore_validator_init(void);
void kore_validator_reload(void);
int kore_validator_add(const char *, u_int8_t, const char *);
int kore_validator_run(struct http_request *, const char *, char *);
int kore_validator_check(struct http_request *,

View File

@ -166,10 +166,9 @@ main(int argc, char *argv[])
argv += optind;
kore_mem_init();
kore_runtime_init();
if (argc > 0)
fatal("did you mean to run `kodev` instead?");
fatal("did you mean to run `kodev´ instead?");
kore_pid = getpid();
nlisteners = 0;
@ -236,7 +235,6 @@ main(int argc, char *argv[])
kore_python_cleanup();
#endif
kore_runtime_cleanup();
kore_mem_cleanup();
return (0);

View File

@ -134,6 +134,8 @@ kore_module_reload(int cbs)
{
struct stat st;
int ret;
struct kore_domain *dom;
struct kore_module_handle *hdlr;
struct kore_module *module;
TAILQ_FOREACH(module, &modules, list) {
@ -180,7 +182,19 @@ kore_module_reload(int cbs)
kore_log(LOG_NOTICE, "reloaded '%s' module", module->path);
}
kore_runtime_reload();
TAILQ_FOREACH(dom, &domains, list) {
TAILQ_FOREACH(hdlr, &(dom->handlers), list) {
kore_free(hdlr->rcall);
hdlr->rcall = kore_runtime_getcall(hdlr->func);
if (hdlr->rcall == NULL)
fatal("no function '%s' found", hdlr->func);
hdlr->errors = 0;
}
}
#if !defined(KORE_NO_HTTP)
kore_validator_reload();
#endif
}
int

View File

@ -51,61 +51,13 @@ struct kore_runtime kore_native_runtime = {
.execute = native_runtime_execute
};
struct symbol {
char *name;
struct kore_runtime_call *rcall;
TAILQ_ENTRY(symbol) list;
};
static TAILQ_HEAD(, symbol) resolved_symbols;
void
kore_runtime_init(void)
{
TAILQ_INIT(&resolved_symbols);
}
void
kore_runtime_cleanup(void)
{
struct symbol *sym;
while ((sym = TAILQ_FIRST(&resolved_symbols)) != NULL) {
TAILQ_REMOVE(&resolved_symbols, sym, list);
kore_free(sym->name);
kore_free(sym);
}
}
void
kore_runtime_reload(void)
{
void *ptr;
struct symbol *sym;
struct kore_runtime *runtime;
TAILQ_FOREACH(sym, &resolved_symbols, list) {
ptr = kore_module_getsym(sym->name, &runtime);
if (ptr == NULL)
fatal("required symbol '%s' not found", sym->name);
sym->rcall->runtime = runtime;
sym->rcall->addr = ptr;
}
}
struct kore_runtime_call *
kore_runtime_getcall(const char *symbol)
{
void *ptr;
struct symbol *sym;
struct kore_runtime_call *rcall;
struct kore_runtime *runtime;
TAILQ_FOREACH(sym, &resolved_symbols, list) {
if (!strcmp(sym->name, symbol))
return (sym->rcall);
}
ptr = kore_module_getsym(symbol, &runtime);
if (ptr == NULL)
return (NULL);
@ -114,11 +66,6 @@ kore_runtime_getcall(const char *symbol)
rcall->addr = ptr;
rcall->runtime = runtime;
sym = kore_malloc(sizeof(*sym));
sym->name = kore_strdup(symbol);
sym->rcall = rcall;
TAILQ_INSERT_TAIL(&resolved_symbols, sym, list);
return (rcall);
}

View File

@ -104,6 +104,22 @@ kore_validator_check(struct http_request *req, struct kore_validator *val,
return (r);
}
void
kore_validator_reload(void)
{
struct kore_validator *val;
TAILQ_FOREACH(val, &validators, list) {
if (val->type != KORE_VALIDATOR_TYPE_FUNCTION)
continue;
kore_free(val->rcall);
val->rcall = kore_runtime_getcall(val->arg);
if (val->rcall == NULL)
fatal("no function for validator %s found", val->arg);
}
}
struct kore_validator *
kore_validator_lookup(const char *name)
{

View File

@ -446,9 +446,7 @@ kore_worker_entry(struct kore_worker *kw)
kore_debug("worker %d shutting down", kw->id);
kore_runtime_cleanup();
kore_mem_cleanup();
exit(0);
}