delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2020/07/02/12:16:59

X-Recipient: archive-cygwin AT delorie DOT com
X-Original-To: cygwin AT cygwin DOT com
Delivered-To: cygwin AT cygwin DOT com
DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org CF8E6386F80F
Authentication-Results: sourceware.org;
dmarc=none (p=none dis=none) header.from=beniston.com
Authentication-Results: sourceware.org; spf=none smtp.mailfrom=jon AT beniston DOT com
X-Session-Marker: 6A6F6E4062656E6973746F6E2E636F6D
X-Spam-Summary: 2, 0, 0, , d41d8cd98f00b204, jon AT beniston DOT com, ,
RULES_HIT:10:41:355:379:541:542:871:968:973:988:989:1000:1155:1260:1308:1309:1313:1314:1345:1381:1437:1516:1518:1534:1540:1575:1587:1594:1711:1730:1747:1764:1777:1792:2110:2393:2559:2562:3138:3139:3140:3141:3142:3352:3865:3866:3867:3868:3870:3871:3872:3874:4184:4250:4605:5007:6119:6261:6506:6747:6748:7281:7861:7875:8660:8957:10004:10394:10400:10848:11232:11604:11658:11914:12297:12555:12679:12895:13071:13148:13230:13439:13972:14096:14180:14659:14827:21060:21063:21080:21212:21433:21627:21789:21809:21917:21939:30054:30075,
0, RBL:none, CacheIP:none, Bayesian:0.5, 0.5, 0.5, Netcheck:none,
DomainCache:0, MSF:not bulk, SPF:, MSBL:0, DNSBL:none, Custom_rules:0:0:0,
LFtime:1, LUA_SUMMARY:none
X-HE-Tag: fight52_39116c526e8a
X-Filterd-Recvd-Size: 3998
From: "Jon Beniston" <jon AT beniston DOT com>
To: <cygwin AT cygwin DOT com>
Subject: SIGINT lost while program calls PeekMessage
Date: Thu, 2 Jul 2020 17:16:10 +0100
Message-ID: <01ea01d6508c$1a340a70$4e9c1f50$@beniston.com>
MIME-Version: 1.0
X-Mailer: Microsoft Outlook 16.0
Thread-Index: AdZQjBkPk3P57jVVTjKjlf3Tv/9Y1w==
X-Spam-Status: No, score=1.0 required=5.0 tests=BAYES_40, KAM_DMARC_STATUS,
KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3,
RCVD_IN_MSPIKE_WL, SPF_HELO_NONE,
SPF_NONE autolearn=no autolearn_force=no version=3.4.2
X-Spam-Level: *
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
server2.sourceware.org
X-BeenThere: cygwin AT cygwin DOT com
X-Mailman-Version: 2.1.29
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-request AT cygwin DOT com?subject=help>
List-Subscribe: <http://cygwin.com/mailman/listinfo/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe>
Sender: "Cygwin" <cygwin-bounces AT cygwin DOT com>

This is a multipart message in MIME format.

------=_NextPart_000_01EB_01D65094.7BF89980
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

Hi,

I have a Cygwin program that:

- registers a SIGINT handler, via signal(SIGINT,h)
- creates a window, using Win32 CreateWindow
- and is then calling PeekMessage for that window in a loop

It appears that while PeekMessage is being called, any SIGINTs sent to the
program are lost. Is this to be expected as it's not really supported or a
bug?

To reproduce:

- Compile and run the attached example program, and repeatedly press CTRL-C
in the console. 
- Only maybe 1 of every 10 or 20 times CTRL-C is pressed, is the signal
handler called.
- Similarly, running 'kill -SIGINT PID' results in most of the signals being
ignored.
- Remove the call to PeekMessage, and the signals are received. 

Cheers,
Jon


Windows 10 Professional Ver 10.0 Build 18363
    Cygwin DLL version info:
        DLL version: 3.1.5


------=_NextPart_000_01EB_01D65094.7BF89980
Content-Type: application/octet-stream;
	name="sigint_example.c"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="sigint_example.c"

#include <signal.h>
#include <stdio.h>

#include <windows.h>

int cnt;
HWND window;
volatile int x =3D 0;

void ctrl_c_handler(int x)
{
  signal(SIGINT, ctrl_c_handler);
  printf("sig=3D%d cnt=3D%d\n", x, ++cnt);
}

LRESULT CALLBACK window_proc(HWND hWnd, UINT message, WPARAM wParam, =
LPARAM lParam)
{
  switch (message)=20
    {
    case WM_DESTROY:
      PostQuitMessage(0);
      x=3D1;
      break;
     =20
    default:
      return DefWindowProc(hWnd, message, wParam, lParam);
  }
  return 0;
}

void create_win()
{
  HINSTANCE hInstance;
  WNDCLASSEX wcex;=20
            =20
  hInstance =3D GetModuleHandle(NULL);
   =20
  wcex.cbSize =3D sizeof(wcex);
  wcex.style =3D CS_HREDRAW | CS_VREDRAW;
  wcex.lpfnWndProc =3D window_proc;
  wcex.cbClsExtra =3D 0;
  wcex.cbWndExtra =3D 0;
  wcex.hInstance =3D hInstance;
  wcex.hIcon =3D LoadIcon(NULL, IDI_APPLICATION);
  wcex.hCursor =3D LoadCursor(NULL, IDC_ARROW);
  wcex.hbrBackground =3D (HBRUSH)(COLOR_WINDOW+1);
  wcex.lpszMenuName =3D NULL;
  wcex.lpszClassName =3D "CtrlCWin";
  wcex.hIconSm =3D NULL;
                    =20
  if (RegisterClassEx(&wcex))
    {       =20
      window =3D CreateWindow("CtrlCWin", "CtrlCWin", =
WS_OVERLAPPEDWINDOW,
                                 CW_USEDEFAULT, CW_USEDEFAULT, 270, 230, =
NULL,=20
                                 NULL, hInstance, NULL);
      if (window)=20
        {
          ShowWindow(window, SW_SHOW);
          UpdateWindow(window);
        }
    }
}

int main()
{
  MSG msg;
  BOOL bRet;

  signal(SIGINT, ctrl_c_handler);
 =20
  create_win();

  while(!x)
  {
    /* If this call to PeekMessage is removed, signals get through */=20
    while (PeekMessage(&msg, window, 0, 0, PM_NOREMOVE))=20
      {
        bRet =3D GetMessage(&msg, window, 0, 0);
        if (bRet > 0)=20
          { =20
            TranslateMessage(&msg);
            DispatchMessage(&msg);
          } =20
      }   =20
  }
  return 0;
}

------=_NextPart_000_01EB_01D65094.7BF89980
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

--
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

------=_NextPart_000_01EB_01D65094.7BF89980--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019