void traceOSProcessInfo_(void) { if (eventlog_enabled) { postCapsetEvent(EVENT_OSPROCESS_PID, CAPSET_OSPROCESS_DEFAULT, getpid()); #if !defined (mingw32_HOST_OS) /* Windows has no strong concept of process hierarchy, so no getppid(). * In any case, this trace event is mainly useful for tracing programs * that use 'forkProcess' which Windows doesn't support anyway. */ postCapsetEvent(EVENT_OSPROCESS_PPID, CAPSET_OSPROCESS_DEFAULT, getppid()); #endif { char buf[256]; snprintf(buf, sizeof(buf), "GHC-%s %s", ProjectVersion, RtsWay); postCapsetStrEvent(EVENT_RTS_IDENTIFIER, CAPSET_OSPROCESS_DEFAULT, buf); } { int argc = 0; char **argv; getFullProgArgv(&argc, &argv); if (argc != 0) { postCapsetVecEvent(EVENT_PROGRAM_ARGS, CAPSET_OSPROCESS_DEFAULT, argc, argv); } } } }
void traceCapsetEvent_ (EventTypeNum tag, CapsetID capset, StgWord info) { #ifdef DEBUG if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) { ACQUIRE_LOCK(&trace_utx); tracePreface(); switch (tag) { case EVENT_CAPSET_CREATE: // (capset, capset_type) debugBelch("created capset %lu of type %d\n", (lnat)capset, (int)info); break; case EVENT_CAPSET_DELETE: // (capset) debugBelch("deleted capset %lu\n", (lnat)capset); break; case EVENT_CAPSET_ASSIGN_CAP: // (capset, capno) debugBelch("assigned cap %lu to capset %lu\n", (lnat)info, (lnat)capset); break; case EVENT_CAPSET_REMOVE_CAP: // (capset, capno) debugBelch("removed cap %lu from capset %lu\n", (lnat)info, (lnat)capset); break; } RELEASE_LOCK(&trace_utx); } else #endif { if (eventlog_enabled) { postCapsetEvent(tag, capset, info); } } }
void traceCapsetEvent_ (EventTypeNum tag, CapsetID capset, StgWord info) { #ifdef DEBUG if (RtsFlags.TraceFlags.tracing == TRACE_STDERR && TRACE_sched) // When events go to stderr, it is annoying to see the capset // events every time, so we only emit them with -Ds. { ACQUIRE_LOCK(&trace_utx); tracePreface(); switch (tag) { case EVENT_CAPSET_CREATE: // (capset, capset_type) debugBelch("created capset %" FMT_Word32 " of type %d\n", capset, (int)info); break; case EVENT_CAPSET_DELETE: // (capset) debugBelch("deleted capset %" FMT_Word32 "\n", capset); break; case EVENT_CAPSET_ASSIGN_CAP: // (capset, capno) debugBelch("assigned cap %" FMT_Word " to capset %" FMT_Word32 "\n", info, capset); break; case EVENT_CAPSET_REMOVE_CAP: // (capset, capno) debugBelch("removed cap %" FMT_Word " from capset %" FMT_Word32 "\n", info, capset); break; } RELEASE_LOCK(&trace_utx); } else #endif { if (eventlog_enabled) { postCapsetEvent(tag, capset, info); } } }