diff --git a/src/hal/components/enum.c b/src/hal/components/enum.c index e4313ab215c..838e8fce479 100644 --- a/src/hal/components/enum.c +++ b/src/hal/components/enum.c @@ -184,6 +184,8 @@ int rtapi_app_main(void){ } +void rtapi_app_exit(void) {} + static void decode(void *v_inst, long period){ int i; enum_inst_t *inst = v_inst; diff --git a/src/rtapi/uspace_rtapi_app.cc b/src/rtapi/uspace_rtapi_app.cc index 31131c2b551..6e6298831b2 100644 --- a/src/rtapi/uspace_rtapi_app.cc +++ b/src/rtapi/uspace_rtapi_app.cc @@ -290,6 +290,12 @@ static int do_load_cmd(string name, vector args) { modules.erase(name); return -1; } + if(!DLSYM(module, "rtapi_app_exit")) { + rtapi_print_msg(RTAPI_MSG_ERR, "%s: component is missing rtapi_app_exit\n", name.c_str()); + dlclose(module); + modules.erase(name); + return -1; + } int result; result = do_comp_args(module, args); @@ -321,7 +327,7 @@ static int do_unload_cmd(string name) { rtapi_print_msg(RTAPI_MSG_ERR, "%s: not loaded\n", name.c_str()); return -1; } else { - int (*stop)(void) = DLSYM(w, "rtapi_app_exit"); + void (*stop)(void) = DLSYM(w, "rtapi_app_exit"); if(stop) stop(); modules.erase(modules.find(name)); dlclose(w);