From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 120869 invoked by alias); 6 Jul 2019 22:46:41 -0000 Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner@cygwin.com Mail-Followup-To: cygwin@cygwin.com Received: (qmail 120862 invoked by uid 89); 6 Jul 2019 22:46:41 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=CORRECT, 100000, srv, HX-Gm-Message-State:APjAAAV X-HELO: mail-io1-f49.google.com Received: from mail-io1-f49.google.com (HELO mail-io1-f49.google.com) (209.85.166.49) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 06 Jul 2019 22:46:39 +0000 Received: by mail-io1-f49.google.com with SMTP id z3so11707620iog.0 for ; Sat, 06 Jul 2019 15:46:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloudflare.com; s=google; h=mime-version:from:date:message-id:subject:to; bh=MgBINewQxfSm7I6+XjbNjns1a4dumOaY+AHrjiiKGmM=; b=tSAjANSZUCETY7SymFTW+QX7h/Lnpp1fqP8oUGBnZPuOrvBd8iH+SwtGDl0x6NkUds EtOzUIUXvK60xCJX8jxLoYUoAgB+rUk/gAGQLZIzflIH7JoJ/5s5gDbuvljizlggOvaR YNx+bUGzdjSS4XQwo2sluyNj48fX9g1Jqwk0A= MIME-Version: 1.0 From: Kenton Varda Date: Sat, 06 Jul 2019 22:46:00 -0000 Message-ID: Subject: sigpending() incorrectly returns signals pending on other threads To: cygwin@cygwin.com Content-Type: multipart/mixed; boundary="000000000000d3680a058d0afb1d" X-SW-Source: 2019-07/txt/msg00051.txt.bz2 --000000000000d3680a058d0afb1d Content-Type: text/plain; charset="UTF-8" Content-length: 1033 Hello Cygwin, According to the (Linux) man page: "sigpending() returns the set of signals that are pending for delivery to the calling thread" However, on Cygwin, sigpending() seems to return the set of signals pending on any thread, as shown in the attached test program. Among other things, this can cause deadlocks in programs which use sigpending() to check for pending signals, then use sigsuspend() to induce delivery of the specific signals that are pending. Because the signal is not actually pending on the current thread, sigsuspend() will unexpectedly block, potentially forever. Output of test program: $ uname -srv CYGWIN_NT-6.1 3.0.7(0.338/5/3) 2019-04-30 18:08 $ gcc -std=c11 -Wall test-sigpending.c -o test-sigpending -pthread && ./test-sigpending sending signal to child thread with pthread_kill()... sigpending() says signal is pending in main thread (WRONG) sigpending() says signal is pending in child thread (CORRECT) received signal in child thread (CORRECT) The program works correctly on Linux. -Kenton --000000000000d3680a058d0afb1d Content-Type: text/x-csrc; charset="US-ASCII"; name="test-sigpending.c" Content-Disposition: attachment; filename="test-sigpending.c" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jxs3qb0c0 Content-length: 3416 I2RlZmluZSBfR05VX1NPVVJDRSAxCgojaW5jbHVkZSA8cHRocmVhZC5oPgoj aW5jbHVkZSA8c2lnbmFsLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVk ZSA8dW5pc3RkLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0 cmluZy5oPgoKI2RlZmluZSBzeXMoY29kZSkgaWYgKChjb2RlKSA8IDApIHsg cGVycm9yKCNjb2RlKTsgZXhpdCgxKTsgfQoKcHRocmVhZF90IG1haW5UaHJl YWQ7CnB0aHJlYWRfdCBjaGlsZFRocmVhZDsKCnZvaWQgaGFuZGxlcihpbnQg c2lnbm8sIHNpZ2luZm9fdCogc2lnaW5mbywgdm9pZCogY29udGV4dCkgewog IGlmIChwdGhyZWFkX2VxdWFsKHB0aHJlYWRfc2VsZigpLCBtYWluVGhyZWFk KSkgewogICAgcHJpbnRmKCJyZWNlaXZlZCBzaWduYWwgaW4gbWFpbiB0aHJl YWQgKFdST05HKVxuIik7CiAgfSBlbHNlIGlmIChwdGhyZWFkX2VxdWFsKHB0 aHJlYWRfc2VsZigpLCBjaGlsZFRocmVhZCkpIHsKICAgIHByaW50ZigicmVj ZWl2ZWQgc2lnbmFsIGluIGNoaWxkIHRocmVhZCAoQ09SUkVDVClcbiIpOwog IH0gZWxzZSB7CiAgICBwcmludGYoInJlY2VpdmVkIHNpZ25hbCBpbiBvdGhl ciB0aHJlYWQgKD8pXG4iKTsKICB9Cn0KCnZvaWQqIHRocmVhZE1haW4odm9p ZCogcGFyYW0pIHsKICAvLyBHaXZlIG1haW4gdGhyZWFkIHRpbWUgdG8gc2Vu ZCB1cyBTSUdVU1IxLgogIHVzbGVlcCgxMDAwMDApOwoKICAvLyBDaGVjayB3 aGF0IHNpZ25hbHMgYXJlIHBlbmRpbmcgd2l0aCBzaWdwZW5kaW5nKCkuCiAg c2lnc2V0X3QgcGVuZGluZzsKICBzeXMoc2lncGVuZGluZygmcGVuZGluZykp OwogIGlmIChzaWdpc21lbWJlcigmcGVuZGluZywgU0lHVVNSMSkpIHsKICAg IHByaW50Zigic2lncGVuZGluZygpIHNheXMgc2lnbmFsIGlzIHBlbmRpbmcg aW4gY2hpbGQgdGhyZWFkIChDT1JSRUNUKVxuIik7CiAgfSBlbHNlIHsKICAg IHByaW50Zigic2lncGVuZGluZygpIHNheXMgc2lnbmFsIGlzIE5PVCBwZW5k aW5nIGluIGNoaWxkIHRocmVhZCAoV1JPTkcpXG4iKTsKICB9CgogIC8vIFVu YmxvY2sgU0lHVVNSMSB0byBzZWUgaWYgaXQgZ2V0cyBkZWxpdmVyZWQuCiAg c2lnc2V0X3QgbWFzazsKICBzeXMoc2lnZW1wdHlzZXQoJm1hc2spKTsKICBz eXMoc2lnYWRkc2V0KCZtYXNrLCBTSUdVU1IxKSk7CiAgc3lzKHNpZ3Byb2Nt YXNrKFNJR19VTkJMT0NLLCAmbWFzaywgTlVMTCkpOwoKICByZXR1cm4gTlVM TDsKfQoKaW50IG1haW4oKSB7CiAgLy8gUmVnaXN0ZXIgYSBzaWduYWwgaGFu ZGxlciBmb3IgU0lHVVNSMS4KICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsK ICBtZW1zZXQoJmFjdGlvbiwgMCwgc2l6ZW9mKGFjdGlvbikpOwogIGFjdGlv bi5zYV9zaWdhY3Rpb24gPSAmaGFuZGxlcjsKICBhY3Rpb24uc2FfZmxhZ3Mg PSBTQV9TSUdJTkZPOwogIHN5cyhzaWdhY3Rpb24oU0lHVVNSMSwgJmFjdGlv biwgTlVMTCkpOwoKICAvLyBCbG9jayBTSUdVU1IxLgogIHNpZ3NldF90IG1h c2s7CiAgc3lzKHNpZ2VtcHR5c2V0KCZtYXNrKSk7CiAgc3lzKHNpZ2FkZHNl dCgmbWFzaywgU0lHVVNSMSkpOwogIHN5cyhzaWdwcm9jbWFzayhTSUdfQkxP Q0ssICZtYXNrLCBOVUxMKSk7CgogIC8vIFN0YXJ0IGNoaWxkIHRocmVhZC4K ICBtYWluVGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CiAgaWYgKHB0aHJlYWRf Y3JlYXRlKCZjaGlsZFRocmVhZCwgTlVMTCwgJnRocmVhZE1haW4sIE5VTEwp IDwgMCkgewogICAgZnByaW50ZihzdGRlcnIsICJwdGhyZWFkX2NyZWF0ZSBm YWlsZWRcbiIpOwogICAgZXhpdCgxKTsKICB9CgogIC8vIFNlbmQgU0lHVVNS MSB0byBjaGlsZCB0aHJlYWQuCiAgcHJpbnRmKCJzZW5kaW5nIHNpZ25hbCB0 byBjaGlsZCB0aHJlYWQgd2l0aCBwdGhyZWFkX2tpbGwoKS4uLlxuIik7CiAg aWYgKHB0aHJlYWRfa2lsbChjaGlsZFRocmVhZCwgU0lHVVNSMSkgPCAwKSB7 CiAgICBmcHJpbnRmKHN0ZGVyciwgInB0aHJlYWRfa2lsbCBmYWlsZWRcbiIp OwogICAgZXhpdCgxKTsKICB9CgogIC8vIENoZWNrIGlmIHNpZ3BlbmRpbmco KSByZXR1cm5zIFNJR1VTUjEuCiAgc2lnc2V0X3QgcGVuZGluZzsKICBzeXMo c2lncGVuZGluZygmcGVuZGluZykpOwogIGlmIChzaWdpc21lbWJlcigmcGVu ZGluZywgU0lHVVNSMSkpIHsKICAgIHByaW50Zigic2lncGVuZGluZygpIHNh eXMgc2lnbmFsIGlzIHBlbmRpbmcgaW4gbWFpbiB0aHJlYWQgKFdST05HKVxu Iik7CiAgfSBlbHNlIHsKICAgIHByaW50Zigic2lncGVuZGluZygpIHNheXMg c2lnbmFsIGlzIE5PVCBwZW5kaW5nIGluIG1haW4gdGhyZWFkIChDT1JSRUNU KVxuIik7CiAgfQoKICAvLyBVbmJsb2NrIFNJR1VTUjEgdG8gc2VlIGlmIGl0 IGdldHMgZGVsaXZlcmVkIHRvIHRoaXMgdGhyZWFkLgogIHN5cyhzaWdlbXB0 eXNldCgmbWFzaykpOwogIHN5cyhzaWdhZGRzZXQoJm1hc2ssIFNJR1VTUjEp KTsKICBzeXMoc2lncHJvY21hc2soU0lHX1VOQkxPQ0ssICZtYXNrLCBOVUxM KSk7CgogIHB0aHJlYWRfam9pbihjaGlsZFRocmVhZCwgTlVMTCk7Cn0KCg== --000000000000d3680a058d0afb1d Content-Type: text/plain; charset=us-ascii Content-length: 219 -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple --000000000000d3680a058d0afb1d--