From owner-p4-projects@FreeBSD.ORG Wed Jul 12 13:41:02 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 277C516A4E1; Wed, 12 Jul 2006 13:41:02 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DFE6316A4DF for ; Wed, 12 Jul 2006 13:41:01 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6656943D4C for ; Wed, 12 Jul 2006 13:41:01 +0000 (GMT) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k6CDf1V3037986 for ; Wed, 12 Jul 2006 13:41:01 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k6CDf1vK037983 for perforce@freebsd.org; Wed, 12 Jul 2006 13:41:01 GMT (envelope-from jhb@freebsd.org) Date: Wed, 12 Jul 2006 13:41:01 GMT Message-Id: <200607121341.k6CDf1vK037983@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Cc: Subject: PERFORCE change 101376 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Jul 2006 13:41:02 -0000 http://perforce.freebsd.org/chv.cgi?CH=101376 Change 101376 by jhb@jhb_mutex on 2006/07/12 13:40:21 Check db_pager_quit in 'show threadchain', 'show lockchain', and 'show allchains'. Otherwise 'show threadchain' could loop forever during a deadlock. Affected files ... .. //depot/projects/smpng/sys/kern/subr_turnstile.c#29 edit Differences ... ==== //depot/projects/smpng/sys/kern/subr_turnstile.c#29 (text+ko) ==== @@ -1046,7 +1046,7 @@ * Follow the chain. We keep walking as long as the thread is * blocked on a turnstile that has an owner. */ - for (;;) { + while (!db_pager_quit) { db_printf("%sthread %d (pid %d, %s) ", prefix, td->td_tid, td->td_proc->p_pid, td->td_name[0] != '\0' ? td->td_name : td->td_proc->p_comm); @@ -1110,6 +1110,8 @@ db_printf("chain %d:\n", i++); print_threadchain(td, " "); } + if (db_pager_quit) + return; } } } @@ -1122,6 +1124,8 @@ struct turnstile *ts; int i; + if (db_pager_quit) + return; for (i = 0; i < indent; i++) db_printf(" "); print_thread(td, "thread "); @@ -1137,6 +1141,8 @@ struct thread *td; int i; + if (db_pager_quit) + return; lock = ts->ts_lockobj; class = LOCK_CLASS(lock); for (i = 0; i < indent; i++)