From owner-freebsd-hackers@FreeBSD.ORG Mon Aug 23 21:22:29 2004 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DEBC516A4CE for ; Mon, 23 Aug 2004 21:22:28 +0000 (GMT) Received: from dan.emsphone.com (dan.emsphone.com [199.67.51.101]) by mx1.FreeBSD.org (Postfix) with ESMTP id 91F8843D49 for ; Mon, 23 Aug 2004 21:22:28 +0000 (GMT) (envelope-from dan@dan.emsphone.com) Received: (from dan@localhost) by dan.emsphone.com (8.12.11/8.12.11) id i7NLLd4w022777; Mon, 23 Aug 2004 16:21:39 -0500 (CDT) (envelope-from dan) Date: Mon, 23 Aug 2004 16:21:39 -0500 From: Dan Nelson To: Simon Barner Message-ID: <20040823212138.GB36920@dan.emsphone.com> References: <20040823210324.567ea3a3.flynn@energyhq.es.eu.org> <20040823200339.GA5717@zi025.glhnet.mhn.de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="RnlQjJ0d97Da+TV1" Content-Disposition: inline In-Reply-To: <20040823200339.GA5717@zi025.glhnet.mhn.de> X-OS: FreeBSD 5.3-BETA1 X-message-flag: Outlook Error User-Agent: Mutt/1.5.6i cc: freebsd-hackers@freebsd.org Subject: Re: valgrind on 5.3BETA1 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Aug 2004 21:22:29 -0000 --RnlQjJ0d97Da+TV1 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In the last episode (Aug 23), Simon Barner said: > Miguel Mendez wrote: > > Is anybody using valgrind on 5.3BETA1 or newer? I've been using it > > for a while on 5.2.1 without any problems, until I upgraded my > > system to RELENG_5. The program works but it never exits after > > running your program, it gets stuck into `umtx' state indefinitely. > > This is happening with both plain jane valgrind and > > valgrind-snapshot ports. Is this already a known issue? > > Hi, > > there is a closed problem report in the database: > http://www.freebsd.org/cgi/query-pr.cgi?pr=68992 > > At the end of that PR, there is a patch that seems to work around the > problem. Could you please test it? That patch looks like it's already in the valgrind-snapshot-352 port, and it still hangs on me. Adding some debugging to the code that calls the umtx syscalls give me: $ valgrind --skin=memcheck date ==14620== Memcheck, a memory error detector for x86-linux. ==14620== Copyright (C) 2002-2004, and GNU GPL'd, by Julian Seward. ==14620== Using valgrind-2.1.2.CVS, a program supervision framework for x86-linux. ==14620== Copyright (C) 2000-2004, and GNU GPL'd, by Julian Seward. ==14620== Locking#1 mutex 0x0/0x0 ==14620== Done 0x187B8/0x187B8 ==14620== For more details, rerun with: -v ==14620== Mon Aug 23 16:17:01 CDT 2004 ==14620== ==14620== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) ==14620== malloc/free: in use at exit: 4096 bytes in 1 blocks. ==14620== malloc/free: 1 allocs, 0 frees, 4096 bytes allocated. ==14620== For a detailed leak analysis, rerun with: --leak-check=yes ==14620== For counts of detected errors, rerun with: -v ==14620== Unlocking mutex 0x187B9/0x187B9 ==14620== Done 0x187B9/0x187B9 ==14620== Locking#2 mutex 0x187B9/0x187B9 ( send SIGKILL from another vty here ) zsh: 14620 killed valgrind --skin=memcheck date There doesn't seem to be any docs on these umtx syscalls so I don't know what the expected behaviour is supposed to be. I printed the pointer and the contents of the u_owner member before and after the syscall. -- Dan Nelson dnelson@allantgroup.com --RnlQjJ0d97Da+TV1 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=patch-dn-umtxdebug --- coregrind/vg_proxylwp.c~ Mon Aug 23 15:47:33 2004 +++ coregrind/vg_proxylwp.c Mon Aug 23 15:48:42 2004 @@ -596,6 +596,8 @@ static const vki_kstack_t ss = { .ss_flags = VKI_SS_DISABLE }; #if __FreeBSD__ == 5 + VG_(message)(Vg_UserMsg, "Locking#1 mutex %p/%p", px->mutex, px->mutex.u_owner); VG_(do_syscall)(__NR__umtx_lock, &px->mutex); + VG_(message)(Vg_UserMsg, "Done %p/%p", px->mutex, px->mutex.u_owner); px->mutex.u_owner |= UMTX_CONTESTED; VG_(do_syscall)(__NR_thr_self, &px->lwp); @@ -943,6 +944,8 @@ px->exitcode = ret; #if __FreeBSD__ == 5 + VG_(message)(Vg_UserMsg, "Unlocking mutex %p/%p", px->mutex, px->mutex.u_owner); ret = VG_(do_syscall)(__NR__umtx_unlock, &px->mutex); + VG_(message)(Vg_UserMsg, "Done %p/%p", px->mutex, px->mutex.u_owner); if (use_rfork) VG_(do_syscall)(__NR_exit, 0); @@ -1171,7 +1173,11 @@ #if __FreeBSD__ == 5 if (block) { if(proxy->lwp != 0) + { + VG_(message)(Vg_UserMsg, "Locking#2 mutex %p/%p", proxy->mutex, proxy->mutex.u_owner); VG_(do_syscall)(__NR__umtx_lock, &proxy->mutex); + VG_(message)(Vg_UserMsg, "Done %p/%p", proxy->mutex, proxy->mutex.u_owner); + } if (status) *status = proxy->exitcode; --RnlQjJ0d97Da+TV1--