ktap_eventdef_info *ktapc_parse_events(const char *eventdef) { char *str = strdup(eventdef); char *sys, *event, *filter, *next; ktap_eventdef_info *evdef_info; int ret; idmap_init(); parse_next_eventdef: next = get_next_eventdef(str); if (get_sys_event_filter_str(str, &sys, &event, &filter)) goto error; verbose_printf("parse_eventdef: sys[%s], event[%s], filter[%s]\n", sys, event, filter); if (!strcmp(sys, "probe")) ret = parse_events_add_probe(event); else if (!strcmp(sys, "sdt")) ret = parse_events_add_sdt(event); else ret = parse_events_add_tracepoint(sys, event); if (ret) goto error; /* don't trace ftrace:function when all tracepoints enabled */ if (!strcmp(sys, "*")) idmap_clear(1); if (filter && *next != '\0') { fprintf(stderr, "Error: eventdef only can append one filter\n"); goto error; } str = next; if (*next != '\0') goto parse_next_eventdef; evdef_info = malloc(sizeof(*evdef_info)); if (!evdef_info) goto error; evdef_info->nr = id_nr; evdef_info->id_arr = get_id_array(); evdef_info->filter = filter; idmap_free(); return evdef_info; error: idmap_free(); cleanup_event_resources(); return NULL; }
void *admin_thread(void *UnusedArg) { SetNameFunction("admin_thr"); while(1) { P(mutex_admin_condvar); while(reload_exports == FALSE) pthread_cond_wait(&(admin_condvar), &(mutex_admin_condvar)); reload_exports = FALSE; V(mutex_admin_condvar); if (rebuild_export_list() <= 0) { LogCrit(COMPONENT_MAIN, "Could not reload the exports list."); continue; } if(pause_threads(PAUSE_RELOAD_EXPORTS) == PAUSE_EXIT) { LogDebug(COMPONENT_MAIN, "Export reload interrupted by shutdown while pausing threads"); /* Be helpfull and exit * (other termination will just blow us away, and that's ok... */ break; } /* Clear the id mapping cache for gss principals to uid/gid. * The id mapping may have changed. */ #ifdef _HAVE_GSSAPI #ifdef _USE_NFSIDMAP uidgidmap_clear(); idmap_clear(); namemap_clear(); #endif /* _USE_NFSIDMAP */ #endif /* _HAVE_GSSAPI */ if (ChangeoverExports()) { LogCrit(COMPONENT_MAIN, "ChangeoverExports failed."); continue; } LogEvent(COMPONENT_MAIN, "Exports reloaded and active"); /* wake_workers could return PAUSE_PAUSE, but we don't have to do * anything special in that case. */ if(wake_threads(AWAKEN_RELOAD_EXPORTS) == PAUSE_EXIT) { LogDebug(COMPONENT_MAIN, "Export reload interrupted by shutdown while waking threads"); /* Be helpfull and exit * (other termination will just blow us away, and that's ok... */ break; } } return NULL; } /* admin_thread */