diff --git a/src/hal/components/enum.c b/src/hal/components/enum.c index 0e1a979782f..061d4271d20 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){ (void)period; int i; diff --git a/src/rtapi/uspace_rtapi_app.cc b/src/rtapi/uspace_rtapi_app.cc index 094c999c8b3..bda630254d0 100644 --- a/src/rtapi/uspace_rtapi_app.cc +++ b/src/rtapi/uspace_rtapi_app.cc @@ -289,6 +289,12 @@ static int do_load_cmd(const string& name, const 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); @@ -320,7 +326,7 @@ static int do_unload_cmd(const 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);