Author: jhb
Date: Wed Aug 22 20:00:41 2012
New Revision: 239584
URL: http://svn.freebsd.org/changeset/base/239584

Log:
  Fix the 'show witness' DDB command to honor db_pager_quit.

Modified:
  head/sys/kern/subr_witness.c

Modified: head/sys/kern/subr_witness.c
==============================================================================
--- head/sys/kern/subr_witness.c        Wed Aug 22 19:56:41 2012        
(r239583)
+++ head/sys/kern/subr_witness.c        Wed Aug 22 20:00:41 2012        
(r239584)
@@ -947,6 +947,8 @@ witness_ddb_display_descendants(int(*prn
        indent++;
        WITNESS_INDEX_ASSERT(w->w_index);
        for (i = 1; i <= w_max_used_index; i++) {
+               if (db_pager_quit)
+                       return;
                if (w_rmatrix[w->w_index][i] & WITNESS_PARENT)
                        witness_ddb_display_descendants(prnt, &w_data[i],
                            indent);
@@ -965,6 +967,8 @@ witness_ddb_display_list(int(*prnt)(cons
 
                /* This lock has no anscestors - display its descendants. */
                witness_ddb_display_descendants(prnt, w, 0);
+               if (db_pager_quit)
+                       return;
        }
 }
        
@@ -986,12 +990,16 @@ witness_ddb_display(int(*prnt)(const cha
         */
        prnt("Sleep locks:\n");
        witness_ddb_display_list(prnt, &w_sleep);
+       if (db_pager_quit)
+               return;
        
        /*
         * Now do spin locks which have been acquired at least once.
         */
        prnt("\nSpin locks:\n");
        witness_ddb_display_list(prnt, &w_spin);
+       if (db_pager_quit)
+               return;
        
        /*
         * Finally, any locks which have not been acquired yet.
@@ -1002,6 +1010,8 @@ witness_ddb_display(int(*prnt)(const cha
                        continue;
                prnt("%s (type: %s, depth: %d)\n", w->w_name,
                    w->w_class->lc_name, w->w_ddb_level);
+               if (db_pager_quit)
+                       return;
        }
 }
 #endif /* DDB */
@@ -2398,6 +2408,8 @@ DB_SHOW_ALL_COMMAND(locks, db_witness_li
                        db_printf("Process %d (%s) thread %p (%d)\n", p->p_pid,
                            p->p_comm, td, td->td_tid);
                        witness_ddb_list(td);
+                       if (db_pager_quit)
+                               return;
                }
        }
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to