Merge pull request 'Fix http handler not found: pre-register via constructor' (#49) from fix/entrypoint-k3s-nonblocking into dev
Dev — Build & local smoke test / build-smoke (push) Failing after 2m29s

Merge PR #49: Fix http handler not found
This commit was merged in pull request #49.
This commit is contained in:
2026-05-10 18:36:47 +00:00
+25
View File
@@ -6,6 +6,31 @@
#include <unistd.h>
#include "el_runtime.h"
/* Pre-register the El HTTP handler so it is found by http_lookup_active()
* regardless of whether the binary was linked with -rdynamic.
*
* el_runtime's http_set_handler resolves handler names via:
* dlsym(RTLD_DEFAULT, "handle_request")
* but dlsym only searches the dynamic symbol table, which only contains
* user-defined symbols when the executable is linked with -rdynamic.
* elb does not add -rdynamic, so dlsym returns NULL and routes return
* "el-runtime: no http handler registered" even though http_serve is called.
*
* The fix: forward-declare handle_request here and register it directly
* via el_runtime_register_handler before main() runs. This populates the
* handler registry so http_lookup_active() finds it without needing dlsym.
*/
extern el_val_t handle_request(el_val_t method, el_val_t path, el_val_t body);
/* el_runtime_register_handler is intentionally not declared in el_runtime.h
* ("extern lookup works since C symbols are global" — runtime comment). */
extern void el_runtime_register_handler(const char* name,
el_val_t (*fn)(el_val_t, el_val_t, el_val_t));
__attribute__((constructor))
static void pre_register_http_handlers(void) {
el_runtime_register_handler("handle_request", handle_request);
}
el_val_t http_get_auth(el_val_t url, el_val_t tok) {
char bearer[2048]; snprintf(bearer, sizeof(bearer), "Bearer %s", EL_CSTR(tok));
el_val_t hdr_val = EL_STR(bearer);