struct forb_main_data *data = arg;
int ret;
ret = data->forb_main(data->orb, data->argc, data->argv);
+ free(data);
exit(ret);
return NULL;
}
for (i = optind; i < argc; i++) {
void *handle;
fosa_thread_id_t tid;
- struct forb_main_data data;
+ struct forb_main_data *data = malloc(sizeof(*data));
- data.filename = argv[i];
- handle = dlopen(data.filename, RTLD_LOCAL|RTLD_LAZY);
+ data->filename = argv[i];
+ handle = dlopen(data->filename, RTLD_LOCAL|RTLD_LAZY);
if (!handle)
- error(1, errno, "dlopen(\"%s\") failed", data.filename);
- data.forb_main = dlsym(handle, "forb_main");
- if (!data.forb_main)
- error(1, errno, "Cannot find forb_main() in %s", data.filename);
+ error(1, errno, "dlopen(\"%s\") failed", data->filename);
+ data->forb_main = dlsym(handle, "forb_main");
+ if (!data->forb_main)
+ error(1, errno, "Cannot find forb_main() in %s", data->filename);
- data.orb = orb;
+ data->orb = orb;
- // parse forb parameters
- data.argc = 1;
- data.argv = &argv[i];
+ // prepare forb_main() parameters
+ data->argc = 1;
+ data->argv = &argv[i];
while (i+1 < argc) {
i++;
if (!strcmp(argv[i], "--"))
break;
else
- data.argc++;
+ data->argc++;
}
- fosa_thread_create(&tid, NULL, forb_main_thread, &data);
+ fosa_thread_create(&tid, NULL, forb_main_thread, data);
libs_loaded_cnt++;
forb_wait_for_server_ready(orb);