undo/redo mixer, freds vp9, next/prev kfrm, ruleof3rds
[goodguy/history.git] / cinelerra-5.1 / guicast / bcsignals.C
index e1e5aa38104a588cc42a56d5555fb103dded0bcd..6847fa5cabbccd7598cbf58ac129c578743d35be 100644 (file)
@@ -175,7 +175,7 @@ void BC_Signals::kill_subs()
                        if( fgetc(fd) == ' ' ) --sp;
 // Read in parent process
                for( ptr=string; !feof(fd) && (*ptr=fgetc(fd))!=' '; ++ptr );
-                       if( (*ptr=fgetc(fd)) == ' ' ) break;
+               if( (*ptr=fgetc(fd)) == ' ' ) break;
                *ptr = 0;
 
 // printf("kill_subs %d process=%d getpid=%d parent_process=%d\n",
@@ -208,6 +208,7 @@ static void signal_entry(int signum)
        BC_Trace::dump_traces();
        BC_Trace::dump_locks();
        BC_Trace::dump_buffers();
+       BC_Trace::dump_shm_stats();
        BC_Trace::delete_temps();
 
 // Call user defined signal handler
@@ -266,10 +267,11 @@ int BC_Signals::x_error_handler(Display *display, XErrorEvent *event)
 }
 
 
-void BC_Signals::initialize()
+void BC_Signals::initialize(const char *trap_path)
 {
        BC_Signals::global_signals = this;
        BC_Trace::global_trace = this;
+       set_trap_path(trap_path);
        handler_lock = (pthread_mutex_t*)calloc(1, sizeof(pthread_mutex_t));
        pthread_mutex_init(handler_lock, 0);
        old_err_handler = XSetErrorHandler(x_error_handler);
@@ -353,7 +355,9 @@ static void handle_dump(int n, siginfo_t * info, void *sc)
        signal(SIGINT, SIG_DFL);
        // gotta be root, or the dump is worthless
        int uid = getuid();
-       if( uid != 0 ) return;
+// it is not necessary to be root if ptrace is allowed via:
+// echo 0 > /proc/sys/kernel/yama/ptrace_scope (usually set to 1)
+//     if( uid != 0 ) return;
        ucontext_t *uc = (ucontext_t *)sc;
        int pid = getpid(), tid = gettid();
        struct sigcontext *c = (struct sigcontext *)&uc->uc_mcontext;
@@ -390,6 +394,7 @@ static void handle_dump(int n, siginfo_t * info, void *sc)
        fprintf(fp,"\nTRACES:\n");   BC_Trace::dump_traces(fp);
        fprintf(fp,"\nLOCKS:\n");    BC_Trace::dump_locks(fp);
        fprintf(fp,"\nBUFFERS:\n");  BC_Trace::dump_buffers(fp);
+       fprintf(fp,"\nSHMMEM:\n");   BC_Trace::dump_shm_stats(fp);
        if( BC_Signals::trap_hook ) {
                fprintf(fp,"\nMAIN HOOK:\n");
                BC_Signals::trap_hook(fp, BC_Signals::trap_data);