From dkmcnulty@gmail.com  Tue Aug 31 02:58:18 2010
Return-Path: <dkmcnulty@gmail.com>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 1702C1065675
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 31 Aug 2010 02:58:18 +0000 (UTC)
	(envelope-from dkmcnulty@gmail.com)
Received: from mail-iw0-f182.google.com (mail-iw0-f182.google.com [209.85.214.182])
	by mx1.freebsd.org (Postfix) with ESMTP id AF35C8FC0C
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 31 Aug 2010 02:58:17 +0000 (UTC)
Received: by iwn36 with SMTP id 36so6177151iwn.13
        for <FreeBSD-gnats-submit@freebsd.org>; Mon, 30 Aug 2010 19:58:16 -0700 (PDT)
Received: by 10.231.182.196 with SMTP id cd4mr5999381ibb.191.1283222101873;
        Mon, 30 Aug 2010 19:35:01 -0700 (PDT)
Received: from dkmcnulty@gmail.com (24-241-226-190.dhcp.mdsn.wi.charter.com [24.241.226.190])
        by mx.google.com with ESMTPS id g31sm8171147ibh.4.2010.08.30.19.34.59
        (version=TLSv1/SSLv3 cipher=RC4-MD5);
        Mon, 30 Aug 2010 19:35:01 -0700 (PDT)
Received: by dkmcnulty@gmail.com (sSMTP sendmail emulation); Mon, 30 Aug 2010 21:34:56 -0500
Message-Id: <4c7c6a55.9f3ae70a.7271.ffffe06c@mx.google.com>
Date: Mon, 30 Aug 2010 21:34:56 -0500
From: "User &" <dkmcnulty@gmail.com>
Reply-To: Dan McNulty <dkmcnulty@gmail.com>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [patch] signal sent to stopped, traced process not immediately handled on continue
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         150138
>Category:       kern
>Synopsis:       [patch] signal sent to stopped, traced process not immediately handled on continue
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    davidxu
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Aug 31 03:00:08 UTC 2010
>Closed-Date:    Tue Mar 11 02:07:52 UTC 2014
>Last-Modified:  Tue Mar 11 02:07:52 UTC 2014
>Originator:     Dan McNulty
>Release:        FreeBSD 7.2-RELEASE i386
>Organization:
>Environment:
FreeBSD 7.2-RELEASE
FreeBSD 9.0-CURRENT (updated on 2010-08-28)
>Description:
In a specific case, a signal sent to a stopped, traced process is not
immediately handled when the process is continued (i.e., the debugger
does not know about the pending signal and the process is not stopped
by the signal).

Here is the scenario:

A debugger is attached to a multithreaded process, where some
threads are blocked in the kernel (e.g., on a mutex)

1) The debugger installs a breakpoint into the multithreaded process and
   continues the process
2) A single thread hits the breakpoint and the process is stopped.
3) While the process is stopped, a signal is delivered by some means
   to one of the threads that is blocked in the kernel
4) After dealing with the breakpoint, the debugger continues the
   process and doesn't learn about the new signal delivered to the 
   blocked thread until it is no longer blocked in the kernel.

>How-To-Repeat:

The problem can be reproduced using the attached waitthread and tkill programs
and gdb. The waitthread creates the specified number of threads and has them
wait on mutex until it receives a character on a named pipe. The tkill program
is used to send signals to threads using the SYS_thr_kill2 syscall. The
following commands can be used to reproduce the problem (assuming waitthread
and tkill have already been built).

% gdb ./waitthread
(gdb) set args 8
(gdb) run
Starting program: /usr/home/mcnulty/scratchdev/i386-unknown-freebsd7.2/waitthread 8
[New LWP 100073]
[New Thread 28404140 (LWP 100073)]
1149 
[New Thread 28404280 (LWP 100054)]
100054 waiting on lock
[New Thread 284043c0 (LWP 100075)]
100075 waiting on lock
[New Thread 28404500 (LWP 100076)]
100076 waiting on lock
[New Thread 28404640 (LWP 100082)]
100082 waiting on lock
[New Thread 28404780 (LWP 100086)]
100086 waiting on lock
[New Thread 284048c0 (LWP 100087)]
100087 waiting on lock
[New Thread 28404a00 (LWP 100088)]
100088 waiting on lock
[New Thread 28404b40 (LWP 100089)]
100089 waiting on lock


# at another prompt, send signals to different threads
% procstat -t 1149 
  PID    TID COMM             TDNAME           CPU  PRI STATE   WCHAN
 1149 100054 waitthread       -                  0  160 sleep   umtxn
 1149 100073 waitthread       initial thread     0  160 sleep   fifoor
 1149 100075 waitthread       -                  0  160 sleep   umtxn
 1149 100076 waitthread       -                  0  160 sleep   umtxn
 1149 100082 waitthread       -                  0  160 sleep   umtxn
 1149 100086 waitthread       -                  0  160 sleep   umtxn
 1149 100087 waitthread       -                  0  160 sleep   umtxn
 1149 100088 waitthread       -                  0  160 sleep   umtxn
 1149 100089 waitthread       -                  0  160 sleep   umtxn

# simulate the breakpoint
% ./tkill 1149 100054 5

# simulate the new signal, sent to a blocked thread
% ./tkill 1149 100086 2

# gdb should know about the trap signal
Program received signal SIGTRAP, Trace/breakpoint trap.
[Switching to Thread 28404280 (LWP 100054)]
0x2809f475 in __error () from /lib/libthr.so.3
(gdb) c
Continuing.

# after continuing the process, the process never stops because of the
pending SIGINT

>Fix:

The attached patch ( to CURRENT ) takes a stab at fixing the problem. The patch
adds code so that even if the process is being traced, a signal sent to a
interruptibly sleeping thread wakes up the thread so it will handle the signal
when the process leaves the stopped state. The added code was copied from the
code that handled stopped, non-traced processes later in the same function.
>Release-Note:
>Audit-Trail:

From: David Xu <davidxu@freebsd.org>
To: Dan McNulty <dkmcnulty@gmail.com>
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: Re: kern/150138: [patch] signal sent to stopped,	traced process not
 immediately handled on continue
Date: Tue, 31 Aug 2010 11:09:32 +0000

 User & wrote:
 
 >> Fix:
 > 
 > The attached patch ( to CURRENT ) takes a stab at fixing the problem. The patch
 > adds code so that even if the process is being traced, a signal sent to a
 > interruptibly sleeping thread wakes up the thread so it will handle the signal
 > when the process leaves the stopped state. The added code was copied from the
 > code that handled stopped, non-traced processes later in the same function.
 
 No patch ?

From: Dan McNulty <dkmcnulty@gmail.com>
To: David Xu <davidxu@freebsd.org>
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: Re: kern/150138: [patch] signal sent to stopped, traced process not
 immediately handled on continue
Date: Mon, 30 Aug 2010 23:01:20 -0500

 --001636283df03ff741048f16a2f2
 Content-Type: text/plain; charset=ISO-8859-1
 
 On Tue, Aug 31, 2010 at 6:09 AM, David Xu <davidxu@freebsd.org> wrote:
 > User & wrote:
 >
 >>> Fix:
 >>
 >> The attached patch ( to CURRENT ) takes a stab at fixing the problem. The
 >> patch
 >> adds code so that even if the process is being traced, a signal sent to a
 >> interruptibly sleeping thread wakes up the thread so it will handle the
 >> signal
 >> when the process leaves the stopped state. The added code was copied from
 >> the
 >> code that handled stopped, non-traced processes later in the same
 >> function.
 >
 > No patch ?
 >
 
 Sorry, in trying to figure out send-pr, didn't actually attach the
 patch and other files.
 
 They should be attached now.
 
 --001636283df03ff741048f16a2f2
 Content-Type: text/x-patch; charset=US-ASCII; name="kern_sig.c.patch"
 Content-Disposition: attachment; filename="kern_sig.c.patch"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_gdi8cgn90
 
 LS0tIHN5cy9rZXJuL2tlcm5fc2lnLmMub3JpZwkyMDEwLTA4LTI5IDEyOjA4OjA5LjAwMDAwMDAw
 MCAtMDUwMAorKysgc3lzL2tlcm4va2Vybl9zaWcuYwkyMDEwLTA4LTI5IDEyOjA5OjAzLjAwMDAw
 MDAwMCAtMDUwMApAQCAtMjE0OSw2ICsyMTQ5LDI0IEBACiAJCQkgKiBzbyBubyBmdXJ0aGVyIGFj
 dGlvbiBpcyBuZWNlc3NhcnkuCiAJCQkgKiBObyBzaWduYWwgY2FuIHJlc3RhcnQgdXMuCiAJCQkg
 Ki8KKworICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAg
 ICAqIElmIGEgdGhyZWFkIGlzIHNsZWVwaW5nIGludGVycnVwdGlibHksIHNpbXVsYXRlIGEKKyAg
 ICAgICAgICAgICAgICAgICAgICAgICAqIHdha2V1cCBzbyB0aGF0IHdoZW4gaXQgaXMgY29udGlu
 dWVkIGl0IHdpbGwgYmUgbWFkZQorICAgICAgICAgICAgICAgICAgICAgICAgICogcnVubmFibGUg
 YW5kIGNhbiBsb29rIGF0IHRoZSBzaWduYWwuICBIb3dldmVyLCBkb24ndCBtYWtlCisgICAgICAg
 ICAgICAgICAgICAgICAgICAgKiB0aGUgUFJPQ0VTUyBydW5uYWJsZSwgbGVhdmUgaXQgc3RvcHBl
 ZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAqIEl0IG1heSBydW4gYSBiaXQgdW50aWwgaXQg
 aGl0cyBhIHRocmVhZF9zdXNwZW5kX2NoZWNrKCkuCisgICAgICAgICAgICAgICAgICAgICAgICAg
 Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIHdha2V1cF9zd2FwcGVyID0gMDsKKyAgICAgICAg
 ICAgICAgICAgICAgICAgIFBST0NfU0xPQ0socCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0
 aHJlYWRfbG9jayh0ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVERfT05fU0xFRVBR
 KHRkKSAmJiAodGQtPnRkX2ZsYWdzICYgVERGX1NJTlRSKSkKKyAgICAgICAgICAgICAgICAgICAg
 ICAgICAgICAgICAgd2FrZXVwX3N3YXBwZXIgPSBzbGVlcHFfYWJvcnQodGQsIGludHJ2YWwpOwor
 ICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX3VubG9jayh0ZCk7CisgICAgICAgICAgICAg
 ICAgICAgICAgICBQUk9DX1NVTkxPQ0socCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
 d2FrZXVwX3N3YXBwZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpY2tfcHJv
 YzAoKTsKKwogCQkJZ290byBvdXQ7CiAJCX0KIAo=
 --001636283df03ff741048f16a2f2
 Content-Type: text/x-csrc; charset=US-ASCII; name="tkill.c"
 Content-Disposition: attachment; filename="tkill.c"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_gdi8cqhp1
 
 I2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHN0
 ZGlvLmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxz
 aWduYWwuaD4KCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKICAgIGlmKCBhcmdj
 ICE9IDQgKSB7CiAgICAgICAgcHJpbnRmKCJVc2FnZTogJXMgPHBpZD4gPGx3cF9pZD4gPHNpZz5c
 biIsIGFyZ3ZbMF0pOwogICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgICB9CgogICAgcGlk
 X3QgcGlkOwogICAgc3NjYW5mKGFyZ3ZbMV0sICIlZCIsICZwaWQpOwoKICAgIGxvbmcgaWQ7CiAg
 ICBzc2NhbmYoYXJndlsyXSwgIiVsZCIsICZpZCk7CgogICAgaW50IHNpZzsKICAgIHNzY2FuZihh
 cmd2WzNdLCAiJWQiLCAmc2lnKTsKICAgIAogICAgaWYoIHN5c2NhbGwoU1lTX3Rocl9raWxsMiwg
 cGlkLCBpZCwgc2lnKSApIHsKICAgICAgICBwZXJyb3IoInN5c2NhbGwiKTsKICAgIH0KCiAgICBy
 ZXR1cm4gRVhJVF9TVUNDRVNTOwp9Cg==
 --001636283df03ff741048f16a2f2
 Content-Type: text/x-csrc; charset=US-ASCII; name="waitthread.c"
 Content-Disposition: attachment; filename="waitthread.c"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_gdi8cuz42
 
 I2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxwdGhyZWFk
 Lmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8YXNzZXJ0Lmg+CiNpbmNsdWRlIDxzaWdu
 YWwuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiNpbmNsdWRl
 IDxzdHJpbmcuaD4KI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2lu
 Y2x1ZGUgPHN5cy9zdGF0Lmg+CiNpbmNsdWRlIDxlcnJuby5oPgoKc3RydWN0IHRocmVhZEFyZyB7
 CiAgICBpbnQgaWQ7CiAgICBwdGhyZWFkX211dGV4X3QgKm11dGV4Owp9OwoKdm9pZCAqZW50cnko
 dm9pZCAqYXJnKSB7CiAgICBzdHJ1Y3QgdGhyZWFkQXJnICp0aGlzQXJnID0gKHN0cnVjdCB0aHJl
 YWRBcmcgKilhcmc7CgogICAgbG9uZyBsd3BfaWQgPSB0aGlzQXJnLT5pZDsKICAgIGlmKCBzeXNj
 YWxsKFNZU190aHJfc2VsZiwgJmx3cF9pZCkgKSB7CiAgICAgICAgcGVycm9yKCJzeXNjYWxsIik7
 CiAgICB9CgogICAgcHJpbnRmKCIlbGQgd2FpdGluZyBvbiBsb2NrXG4iLCBsd3BfaWQpOwoKICAg
 IGlmKCBwdGhyZWFkX211dGV4X2xvY2sodGhpc0FyZy0+bXV0ZXgpICE9IDAgKSB7CiAgICAgICAg
 cGVycm9yKCJwdGhyZWFkX211dGV4X2xvY2siKTsKICAgICAgICByZXR1cm4gTlVMTDsKICAgIH0K
 CiAgICBwcmludGYoIiVsZCBvYnRhaW5lZCBsb2NrXG4iLCBsd3BfaWQpOwoKICAgIGlmKCBwdGhy
 ZWFkX211dGV4X3VubG9jayh0aGlzQXJnLT5tdXRleCkgIT0gMCApIHsKICAgICAgICBwZXJyb3Io
 InB0aHJlYWRfbXV0ZXhfdW5sb2NrIik7CiAgICAgICAgcmV0dXJuIE5VTEw7CiAgICB9CgogICAg
 cHJpbnRmKCIlbGQgcmVsZWFzZWQgbG9ja1xuIiwgbHdwX2lkKTsKCiAgICByZXR1cm4gTlVMTDsK
 fQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CiAgICBpZiggMiAhPSBhcmdjICkg
 ewogICAgICAgIHByaW50ZigiVXNhZ2U6ICVzIDxudW0uIG9mIHRocmVhZHM+XG4iLCBhcmd2WzBd
 KTsKICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwogICAgfQoKICAgIHByaW50ZigiJWRcbiIs
 IGdldHBpZCgpKTsKCiAgICBpbnQgbnVtVGhyZWFkczsKICAgIHNzY2FuZihhcmd2WzFdLCAiJWQi
 LCAmbnVtVGhyZWFkcyk7CiAgICBpZiggbnVtVGhyZWFkcyA8IDEgKSBudW1UaHJlYWRzID0gMTsK
 CiAgICBwdGhyZWFkX3QgKnRocmVhZHMgPSAocHRocmVhZF90ICopbWFsbG9jKHNpemVvZihwdGhy
 ZWFkX3QpKm51bVRocmVhZHMpOwoKICAgIHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXggPSAocHRocmVh
 ZF9tdXRleF90ICopbWFsbG9jKHNpemVvZihwdGhyZWFkX211dGV4X3QpKTsKCiAgICBpZiggcHRo
 cmVhZF9tdXRleF9pbml0KG11dGV4LCBOVUxMKSAhPSAwICkgewogICAgICAgIHBlcnJvcigicHRo
 cmVhZF9tdXRleF9pbml0Iik7CiAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKICAgIH0KCiAg
 ICBpZiggcHRocmVhZF9tdXRleF9sb2NrKG11dGV4KSAhPSAwICkgewogICAgICAgIHBlcnJvcigi
 cHRocmVhZF9tdXRleF9sb2NrIik7CiAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKICAgIH0K
 CiAgICBpbnQgaTsKICAgIGZvcihpID0gMDsgaSA8IG51bVRocmVhZHM7ICsraSkgewogICAgICAg
 IHN0cnVjdCB0aHJlYWRBcmcgKmFyZyA9IChzdHJ1Y3QgdGhyZWFkQXJnICopbWFsbG9jKHNpemVv
 ZihzdHJ1Y3QgdGhyZWFkQXJnKSk7CiAgICAgICAgYXJnLT5pZCA9IGk7CiAgICAgICAgYXJnLT5t
 dXRleCA9IG11dGV4OwogICAgICAgIGFzc2VydCggIXB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRzW2ld
 LCBOVUxMLCAmZW50cnksICh2b2lkICopYXJnKSApOwogICAgfQoKICAgIC8vIFdhaXQgb24gdGhl
 IG5hbWVkIHBpcGUKICAgIHVubGluaygiL3RtcC93YWl0dGhyZWFkIik7CiAgICBpZiggbWtmaWZv
 KCIvdG1wL3dhaXR0aHJlYWQiLCBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAgfCBTX0lXR1JQ
 KSApIHsKICAgICAgICBwZXJyb3IoIm1rZmlmbyIpOwogICAgICAgIHJldHVybiBFWElUX0ZBSUxV
 UkU7CiAgICB9CgogICAgRklMRSAqZmlmbzsKICAgIGRvIHsKICAgICAgICBpZiggKGZpZm8gPSBm
 b3BlbigiL3RtcC93YWl0dGhyZWFkIiwgInIiKSkgPT0gTlVMTCApIHsKICAgICAgICAgICAgaWYo
 IGVycm5vID09IEVJTlRSICkgY29udGludWU7CgogICAgICAgICAgICBwZXJyb3IoImZvcGVuIik7
 CiAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgICAgICAgfQogICAgICAgIGJyZWFr
 OwogICAgfXdoaWxlKDEpOwoKICAgIHVuc2lnbmVkIGNoYXIgYnl0ZTsKICAgIGlmKCBmcmVhZCgm
 Ynl0ZSwgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpLCAxLCBmaWZvKSAhPSAxICkgewogICAgICAgIHBl
 cnJvcigiZnJlYWQiKTsKICAgIH0KCiAgICBmY2xvc2UoZmlmbyk7CgogICAgdW5saW5rKCIvdG1w
 L3dhaXR0aHJlYWQiKTsKCiAgICBwcmludGYoIlJlY2VpdmVkIG5vdGlmaWNhdGlvblxuIik7Cgog
 ICAgaWYoIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKG11dGV4KSAhPSAwICkgewogICAgICAgIHBlcnJv
 cigicHRocmVhZF9tdXRleF91bmxvY2siKTsKICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwog
 ICAgfQoKICAgIHByaW50ZigiVW5sb2NrZWQgbXV0ZXgsIGpvaW5pbmdcbiIpOwoKICAgIGZvcihp
 ID0gMDsgaSA8IG51bVRocmVhZHM7ICsraSApIHsKICAgICAgICBhc3NlcnQoICFwdGhyZWFkX2pv
 aW4odGhyZWFkc1tpXSwgTlVMTCkgKTsKICAgIH0KCiAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwp9
 Cg==
 --001636283df03ff741048f16a2f2--

From: David Xu <davidxu@freebsd.org>
To: Dan McNulty <dkmcnulty@gmail.com>
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: Re: kern/150138: [patch] signal sent to stopped, traced process not
 immediately handled on continue
Date: Tue, 31 Aug 2010 13:00:28 +0000

 Dan McNulty wrote:
 > On Tue, Aug 31, 2010 at 6:09 AM, David Xu <davidxu@freebsd.org> wrote:
 >> User & wrote:
 >>
 >>>> Fix:
 >>> The attached patch ( to CURRENT ) takes a stab at fixing the problem. The
 >>> patch
 >>> adds code so that even if the process is being traced, a signal sent to a
 >>> interruptibly sleeping thread wakes up the thread so it will handle the
 >>> signal
 >>> when the process leaves the stopped state. The added code was copied from
 >>> the
 >>> code that handled stopped, non-traced processes later in the same
 >>> function.
 >> No patch ?
 >>
 > 
 > Sorry, in trying to figure out send-pr, didn't actually attach the
 > patch and other files.
 > 
 > They should be attached now.
 > 
 
 I think the patch is right, thanks!
 
 

From: David Xu <davidxu@freebsd.org>
To: Dan McNulty <dkmcnulty@gmail.com>
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: Re: kern/150138: [patch] signal sent to stopped, traced process not
 immediately handled on continue
Date: Tue, 31 Aug 2010 13:27:01 +0000

 Dan McNulty wrote:
 > On Tue, Aug 31, 2010 at 6:09 AM, David Xu <davidxu@freebsd.org> wrote:
 >> User & wrote:
 >>
 >>>> Fix:
 >>> The attached patch ( to CURRENT ) takes a stab at fixing the problem. The
 >>> patch
 >>> adds code so that even if the process is being traced, a signal sent to a
 >>> interruptibly sleeping thread wakes up the thread so it will handle the
 >>> signal
 >>> when the process leaves the stopped state. The added code was copied from
 >>> the
 >>> code that handled stopped, non-traced processes later in the same
 >>> function.
 >> No patch ?
 >>
 > 
 > Sorry, in trying to figure out send-pr, didn't actually attach the
 > patch and other files.
 > 
 > They should be attached now.
 > 
 
 I also propose a new patch, it seems if the process is being traced,
 we should hand off job control to debugger, all job control caused
 by STOP/CONT signals should be skipped, but normal signal should
 remove thread from sleep queue.
 
 
 Index: kern_sig.c
 ===================================================================
 --- kern_sig.c	(版本 211859)
 +++ kern_sig.c	(工作副本)
 @@ -2139,20 +2139,9 @@
   	 * We try do the per-process part here.
   	 */
   	if (P_SHOULDSTOP(p)) {
 -		/*
 -		 * The process is in stopped mode. All the threads should be
 -		 * either winding down or already on the suspended queue.
 -		 */
 -		if (p->p_flag & P_TRACED) {
 -			/*
 -			 * The traced process is already stopped,
 -			 * so no further action is necessary.
 -			 * No signal can restart us.
 -			 */
 -			goto out;
 -		}
 -
   		if (sig == SIGKILL) {
 +			if (p->p_flag & P_TRACED)
 +				goto out;
   			/*
   			 * SIGKILL sets process running.
   			 * It will die elsewhere.
 @@ -2163,6 +2152,8 @@
   		}
 
   		if (prop & SA_CONT) {
 +			if (p->p_flag & P_TRACED)
 +				goto out;
   			/*
   			 * If SIGCONT is default (or ignored), we continue the
   			 * process but don't leave the signal in sigqueue as
 @@ -2207,6 +2198,8 @@
   		}
 
   		if (prop & SA_STOP) {
 +			if (p->p_flag & P_TRACED)
 +				goto out;
   			/*
   			 * Already stopped, don't need to stop again
   			 * (If we did the shell could get confused).

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/150138: commit references a PR
Date: Tue, 31 Aug 2010 07:16:01 +0000 (UTC)

 Author: davidxu
 Date: Tue Aug 31 07:15:50 2010
 New Revision: 212047
 URL: http://svn.freebsd.org/changeset/base/212047
 
 Log:
   If a process is being debugged, skips job control caused by SIGSTOP/SIGCONT
   signals, because it is managed by debugger, however a normal signal sent to
   a interruptibly sleeping thread wakes up the thread so it will handle the
   signal when the process leaves the stopped state.
   
   PR:	150138
   MFC after:	1 week
 
 Modified:
   head/sys/kern/kern_sig.c
 
 Modified: head/sys/kern/kern_sig.c
 ==============================================================================
 --- head/sys/kern/kern_sig.c	Tue Aug 31 06:22:03 2010	(r212046)
 +++ head/sys/kern/kern_sig.c	Tue Aug 31 07:15:50 2010	(r212047)
 @@ -2139,20 +2139,9 @@ tdsendsignal(struct proc *p, struct thre
  	 * We try do the per-process part here.
  	 */
  	if (P_SHOULDSTOP(p)) {
 -		/*
 -		 * The process is in stopped mode. All the threads should be
 -		 * either winding down or already on the suspended queue.
 -		 */
 -		if (p->p_flag & P_TRACED) {
 -			/*
 -			 * The traced process is already stopped,
 -			 * so no further action is necessary.
 -			 * No signal can restart us.
 -			 */
 -			goto out;
 -		}
 -
  		if (sig == SIGKILL) {
 +			if (p->p_flag & P_TRACED)
 +				goto out;
  			/*
  			 * SIGKILL sets process running.
  			 * It will die elsewhere.
 @@ -2163,6 +2152,8 @@ tdsendsignal(struct proc *p, struct thre
  		}
  
  		if (prop & SA_CONT) {
 +			if (p->p_flag & P_TRACED)
 +				goto out;
  			/*
  			 * If SIGCONT is default (or ignored), we continue the
  			 * process but don't leave the signal in sigqueue as
 @@ -2207,6 +2198,8 @@ tdsendsignal(struct proc *p, struct thre
  		}
  
  		if (prop & SA_STOP) {
 +			if (p->p_flag & P_TRACED)
 +				goto out;
  			/*
  			 * Already stopped, don't need to stop again
  			 * (If we did the shell could get confused).
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->patched 
State-Changed-By: arundel 
State-Changed-When: Tue Aug 31 12:28:28 UTC 2010 
State-Changed-Why:  
Patched in HEAD (r212047). 


Responsible-Changed-From-To: freebsd-bugs->davidxu 
Responsible-Changed-By: arundel 
Responsible-Changed-When: Tue Aug 31 12:28:28 UTC 2010 
Responsible-Changed-Why:  
Assign to committer as MFC reminder. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=150138 

From: Dan McNulty <dkmcnulty@gmail.com>
To: David Xu <davidxu@freebsd.org>
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: Re: kern/150138: [patch] signal sent to stopped, traced process not
 immediately handled on continue
Date: Tue, 31 Aug 2010 09:47:33 -0500

 T24gVHVlLCBBdWcgMzEsIDIwMTAgYXQgODoyNyBBTSwgRGF2aWQgWHUgPGRhdmlkeHVAZnJlZWJz
 ZC5vcmc+IHdyb3RlOgo+IERhbiBNY051bHR5IHdyb3RlOgo+Pgo+PiBPbiBUdWUsIEF1ZyAzMSwg
 MjAxMCBhdCA2OjA5IEFNLCBEYXZpZCBYdSA8ZGF2aWR4dUBmcmVlYnNkLm9yZz4gd3JvdGU6Cj4+
 Pgo+Pj4gVXNlciAmIHdyb3RlOgo+Pj4KPj4+Pj4gRml4Ogo+Pj4+Cj4+Pj4gVGhlIGF0dGFjaGVk
 IHBhdGNoICggdG8gQ1VSUkVOVCApIHRha2VzIGEgc3RhYiBhdCBmaXhpbmcgdGhlIHByb2JsZW0u
 Cj4+Pj4gVGhlCj4+Pj4gcGF0Y2gKPj4+PiBhZGRzIGNvZGUgc28gdGhhdCBldmVuIGlmIHRoZSBw
 cm9jZXNzIGlzIGJlaW5nIHRyYWNlZCwgYSBzaWduYWwgc2VudCB0bwo+Pj4+IGEKPj4+PiBpbnRl
 cnJ1cHRpYmx5IHNsZWVwaW5nIHRocmVhZCB3YWtlcyB1cCB0aGUgdGhyZWFkIHNvIGl0IHdpbGwg
 aGFuZGxlIHRoZQo+Pj4+IHNpZ25hbAo+Pj4+IHdoZW4gdGhlIHByb2Nlc3MgbGVhdmVzIHRoZSBz
 dG9wcGVkIHN0YXRlLiBUaGUgYWRkZWQgY29kZSB3YXMgY29waWVkCj4+Pj4gZnJvbQo+Pj4+IHRo
 ZQo+Pj4+IGNvZGUgdGhhdCBoYW5kbGVkIHN0b3BwZWQsIG5vbi10cmFjZWQgcHJvY2Vzc2VzIGxh
 dGVyIGluIHRoZSBzYW1lCj4+Pj4gZnVuY3Rpb24uCj4+Pgo+Pj4gTm8gcGF0Y2ggPwo+Pj4KPj4K
 Pj4gU29ycnksIGluIHRyeWluZyB0byBmaWd1cmUgb3V0IHNlbmQtcHIsIGRpZG4ndCBhY3R1YWxs
 eSBhdHRhY2ggdGhlCj4+IHBhdGNoIGFuZCBvdGhlciBmaWxlcy4KPj4KPj4gVGhleSBzaG91bGQg
 YmUgYXR0YWNoZWQgbm93Lgo+Pgo+Cj4gSSBhbHNvIHByb3Bvc2UgYSBuZXcgcGF0Y2gsIGl0IHNl
 ZW1zIGlmIHRoZSBwcm9jZXNzIGlzIGJlaW5nIHRyYWNlZCwKPiB3ZSBzaG91bGQgaGFuZCBvZmYg
 am9iIGNvbnRyb2wgdG8gZGVidWdnZXIsIGFsbCBqb2IgY29udHJvbCBjYXVzZWQKPiBieSBTVE9Q
 L0NPTlQgc2lnbmFscyBzaG91bGQgYmUgc2tpcHBlZCwgYnV0IG5vcm1hbCBzaWduYWwgc2hvdWxk
 Cj4gcmVtb3ZlIHRocmVhZCBmcm9tIHNsZWVwIHF1ZXVlLgo+Cj4KPiBJbmRleDoga2Vybl9zaWcu
 Ywo+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT0KPiAtLS0ga2Vybl9zaWcuYyDCoCjniYjmnKwgMjExODU5KQo+ICsrKyBr
 ZXJuX3NpZy5jIMKgKOW3peS9nOWJr+acrCkKPiBAQCAtMjEzOSwyMCArMjEzOSw5IEBACj4gwqAg
 wqAgwqAgwqAgKiBXZSB0cnkgZG8gdGhlIHBlci1wcm9jZXNzIHBhcnQgaGVyZS4KPiDCoCDCoCDC
 oCDCoCAqLwo+IMKgIMKgIMKgIMKgaWYgKFBfU0hPVUxEU1RPUChwKSkgewo+IC0gwqAgwqAgwqAg
 wqAgwqAgwqAgwqAgLyoKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKiBUaGUgcHJvY2VzcyBp
 cyBpbiBzdG9wcGVkIG1vZGUuIEFsbCB0aGUgdGhyZWFkcyBzaG91bGQgYmUKPiAtIMKgIMKgIMKg
 IMKgIMKgIMKgIMKgIMKgKiBlaXRoZXIgd2luZGluZyBkb3duIG9yIGFscmVhZHkgb24gdGhlIHN1
 c3BlbmRlZCBxdWV1ZS4KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKi8KPiAtIMKgIMKgIMKg
 IMKgIMKgIMKgIMKgIGlmIChwLT5wX2ZsYWcgJiBQX1RSQUNFRCkgewo+IC0gwqAgwqAgwqAgwqAg
 wqAgwqAgwqAgwqAgwqAgwqAgwqAgLyoKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
 IMKgIMKgKiBUaGUgdHJhY2VkIHByb2Nlc3MgaXMgYWxyZWFkeSBzdG9wcGVkLAo+IC0gwqAgwqAg
 wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAqIHNvIG5vIGZ1cnRoZXIgYWN0aW9uIGlzIG5l
 Y2Vzc2FyeS4KPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKiBObyBzaWdu
 YWwgY2FuIHJlc3RhcnQgdXMuCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
 oCovCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIG91dDsKPiAtIMKg
 IMKgIMKgIMKgIMKgIMKgIMKgIH0KPiAtCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiAoc2ln
 ID09IFNJR0tJTEwpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChw
 LT5wX2ZsYWcgJiBQX1RSQUNFRCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
 IMKgIMKgIMKgIMKgIGdvdG8gb3V0Owo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
 IMKgLyoKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqIFNJR0tJTEwgc2V0
 cyBwcm9jZXNzIHJ1bm5pbmcuCj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
 KiBJdCB3aWxsIGRpZSBlbHNld2hlcmUuCj4gQEAgLTIxNjMsNiArMjE1Miw4IEBACj4gwqAgwqAg
 wqAgwqAgwqAgwqAgwqAgwqB9Cj4KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIChwcm9wICYg
 U0FfQ09OVCkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHAtPnBf
 ZmxhZyAmIFBfVFJBQ0VEKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
 wqAgwqAgwqAgZ290byBvdXQ7Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAv
 Kgo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICogSWYgU0lHQ09OVCBpcyBk
 ZWZhdWx0IChvciBpZ25vcmVkKSwgd2UgY29udGludWUKPiB0aGUKPiDCoCDCoCDCoCDCoCDCoCDC
 oCDCoCDCoCDCoCDCoCDCoCDCoCAqIHByb2Nlc3MgYnV0IGRvbid0IGxlYXZlIHRoZSBzaWduYWwg
 aW4gc2lncXVldWUgYXMKPiBAQCAtMjIwNyw2ICsyMTk4LDggQEAKPiDCoCDCoCDCoCDCoCDCoCDC
 oCDCoCDCoH0KPgo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaWYgKHByb3AgJiBTQV9TVE9QKSB7
 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAocC0+cF9mbGFnICYgUF9U
 UkFDRUQpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBn
 b3RvIG91dDsKPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC8qCj4gwqAgwqAg
 wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKiBBbHJlYWR5IHN0b3BwZWQsIGRvbid0IG5l
 ZWQgdG8gc3RvcCBhZ2Fpbgo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICog
 KElmIHdlIGRpZCB0aGUgc2hlbGwgY291bGQgZ2V0IGNvbmZ1c2VkKS4KPgoKR3JlYXQhIFRoYW5r
 cyBmb3IgdGhlIHF1aWNrIHJlc3BvbnNlIG9uIHRoaXMuCgpJIGtub3cgb2Ygc29tZSBkZWJ1Z2dl
 cnMgdGhhdCB1c2UgYSBTSUdTVE9QIHRvIHN0b3AgdGhlIGRlYnVnZ2VlIHdoZW4KcmVxdWVzdGVk
 IGJ5IHRoZSB1c2VyLgpXb3VsZCBpdCBtYWtlIHNlbnNlIGZvciBhIFNJR1NUT1AgdG8gd2FrZSB1
 cCBhbiBpbnRlcnJ1cHRpYmx5IHNsZWVwaW5nCnRocmVhZCB3aGVuIHRoZSBwcm9jZXNzIGlzIGJl
 aW5nIHRyYWNlZD8KClRoYW5rcyEK

From: David Xu <davidxu@freebsd.org>
To: Dan McNulty <dkmcnulty@gmail.com>
Cc: FreeBSD-gnats-submit@freebsd.org
Subject: Re: kern/150138: [patch] signal sent to stopped, traced process not
 immediately handled on continue
Date: Wed, 01 Sep 2010 09:29:10 +0000

 Dan McNulty wrote:
 
 > Great! Thanks for the quick response on this.
 > 
 > I know of some debuggers that use a SIGSTOP to stop the debuggee when
 > requested by the user.
 > Would it make sense for a SIGSTOP to wake up an interruptibly sleeping
 > thread when the process is being traced?
 > 
 > Thanks!
 
 No, if history behavior was not doing this, then we should not do it as
 well.
 
 
 
State-Changed-From-To: patched->closed 
State-Changed-By: davidxu 
State-Changed-When: Tue Mar 11 02:07:35 UTC 2014 
State-Changed-Why:  
Fixed. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=150138 
>Unformatted:
