www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2022/05/06/22:01:58

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.4.1 sourceware.org 111D83858C53
Authentication-Results: sourceware.org;
dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;
h=mime-version:references:in-reply-to:from:date:message-id:subject:to;
bh=KxxH6w4yQYoNlXQdlKIbBR1HC6gKAj009K1pH/W3hQA=;
b=nBBmBiE1wl8Gn2tvE6E3TyEsKZFsRTDQ0GVNvttjW6RnGHJLFqpDkUxlB444HqiTLl
KZlKKtps1ClJTb9pvrLf/dVq3qjtAiXwRdWEixybdZChOZrUM0EIYcnXIyQpkTheMcL5
XFN1qOLKSaAHirrvnb97J/9ca216j1weZ3ECTUd2FKRIKfYaLDD1cP4yqUNIQw7fjA1C
uYtUYSVirGs4N+pUxhD59qT7TVH88xo/f9WlekI34k8jsxPy04OjtNtpwyABxqdmtTRw
/MiAJ/A7CBTZZ7VXmC8ofJMKmwqjyQUW6n4CB1Q5Zaj14NOFFS2oFEpWrpnlKAuRsqqu
rqhw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20210112;
h=x-gm-message-state:mime-version:references:in-reply-to:from:date
:message-id:subject:to;
bh=KxxH6w4yQYoNlXQdlKIbBR1HC6gKAj009K1pH/W3hQA=;
b=ol3DZ8QXrxXL7xxcgro1trShjTR78rHtJg9mmd3YnQAKhT3kDP80vcFSML36Cu8Z+9
g5gCVLTQRTZcM5Gbf4w54XL1rjk/i0k+kVr8JznMWrAoF5P9S++5izlS1poO9Zdla2e9
ChJHPV+sCUTL+iD7vrICpbVWBqcBeKOrJuusEGSTfFIM5OAyBy+YsB3w8Viy1abFgGZh
SJqsmL6zhSgUohDs24EqNU4ZW+qzVNYgAMbVU5Ryhahfh/DBhtm/4kQMr3d4+OyO/8CG
e2votGHo9/sxwkhH2emHxsNDfa8Q8ZKtiYjZGVpYjzpp2K/zWggUe+EcCqZ0MddriDpK
d92A==
X-Gm-Message-State: AOAM532Wx8Ck+g1rUE8qiCqADX6AU5+oJ9NrbKA4kRctyZ7U6jKPJ2yl
1qZWmXJUVaFqXprYx5Z6YgR1eLYd2yYRuGCViCGwwL1O
X-Google-Smtp-Source: ABdhPJyK4fmfR6ztN/ib7lW73jv/iv/QOGYmqkMf00Dosm/OI+5RR4cyITWYLL4NYuOMmlcOv++60ByyKMwOmjduBZs=
X-Received: by 2002:a05:6638:30e:b0:32a:f864:e4d4 with SMTP id
w14-20020a056638030e00b0032af864e4d4mr2569389jap.218.1651888898827; Fri, 06
May 2022 19:01:38 -0700 (PDT)
MIME-Version: 1.0
References: <CAMoHPCaPjj-XyzRXc4yv1U5=1PXK_tASbEd5Caxi0dSPZA89og AT mail DOT gmail DOT com>
<c15e37c6-53d9-3837-5b66-ceacf348dc8b AT dronecode DOT org DOT uk>
<CAMoHPCZ18Q_G=JTwOwu2ij3feJ6cd9CHxddONuProrL3kwgBKw AT mail DOT gmail DOT com>
In-Reply-To: <CAMoHPCZ18Q_G=JTwOwu2ij3feJ6cd9CHxddONuProrL3kwgBKw@mail.gmail.com>
From: "S.J. Luo" <sjaluo AT gmail DOT com>
Date: Sat, 7 May 2022 10:01:32 +0800
Message-ID: <CAMoHPCaD+wx98n3QmaehE+xdiuOe6OC1kQsEPLm156HS9r4xzA@mail.gmail.com>
Subject: Re: Window flickering problem in XWin multiwindow mode
To: cygwin AT cygwin DOT com
X-Spam-Status: No, score=-0.7 required=5.0 tests=BAYES_00, DKIM_SIGNED,
DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,
SPF_HELO_NONE, SPF_PASS, TXREP,
T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4
X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: <https://cygwin.com/mailman/listinfo/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe>
Sender: "Cygwin" <cygwin-bounces+archive-cygwin=delorie DOT com AT cygwin DOT com>

--00000000000005fcba05de625b8a
Content-Type: text/plain; charset="UTF-8"

Hi,

> > > I have some EDA tools running on a Linux machine and display on my Windows
> > > PC using xorg-server-21.1.3 XWin multiwindow mode
> > > Sometimes the application window flickers forever for an unknown reason.
> > > The problem became more severe after my PC upgrade to Windows10.
> > >
> > > Knowing the root cause, I am now able to demonstrate the issue with a small
> > > test case as well as a patch that works for me. Both are attached below.
> >
> > Thanks very much for taking the time to look into this, and writing a patch.
> > But I'd like to add a bit more commentary, which perhaps you can supply,
> > about the analysis you did to determine:
> >
> > 1. how the code is misbehaving
> > 2. how this change remedies that
> > 3. how this change doesn't effect anything else
> >
> > What your fix does is examine the queue of pending WM messages to
> > determine if there are any more pending for the window receiving a
> > WM_WM_CHANGE_STATE message, and if there are, ignore it.
> >
> > It seems to me that is error prone, in a couple of ways:
> >
> > 1. it should check the message type as well, as e.g. a pending message
> > of a different type could cause a WM_WM_CHANGE_STATE message to be ignored.
> >
> > 2. even then, assuming that successive WM_WM_CHANGE_STATE messages
> > cancel out each other isn't always true e.g. consider a sequence of
> > _NET_WM_STATE_ADD _NET_WM_STATE_MAXIMIZED_VERT followed by
> > _NET_WM_STATE_ADD _NET_WM_STATE_MAXIMIZED_HORZ.
> >

> Here I have some details on the problem:
> In following, WWCS means WM_WM_CHANGE_STATE
> There exists a message self-generating loop
> I.e., a WWCS message may generate another WWCS.
>
> winSendMessageToWM(WWCS) --> MultiWindowWMProc(WWCS)
> --> UpdateState() --> ShowWindow() --> MultiWindowProc(WM_SIZE)
> --> winAdjustXWindowState() --> winSendMessageToWM(WWCS)
>
> In normal case, there is a conditional code inside UpdateState() that
> could break the loop.
>
>             if (current_state == state)
>                 return;
>
> Normally after maximizing the window, the WWCS just
> to be self-generated once. On processing the 2nd WWCS,
> the current window state matches WWCS target state
> and ShowWindow() won't be called and the loop could end.
>
> Initial
>     Window state normal
>     queue : | WWCS(max1) |
> --> process WWCS(max1) :
>     Winow state (norm) != target state (max2)
>     Set Window state to max and generate WWCS(max2)
>     queue : | WWCS(max2) |
> --> Process WWCS(max2) :
>     Winow state (max) == target state (max)
>     break
>
> where WWCS(max1) means WWCS msg with target state max
> and 1 means first generated/inserted WWCS in queue.
>
> However, there is case triggering this loop running forever.
> Assuming intitially there are two WWCS message exists
> where one is to maximize window and one is to normal window
> The condition of state compare in UpdateState() would never match.
> And WWCS(max) and WWCS(norm) is going to self-generate in turn.
>
> Initial
>     Window state normal
>     queue : | WWCS(max1) | WWCS(norm1) |
> --> process WWCS(max1)
>     Winow state (norm) != target state (max)
>     Set window state to max and generate WWCS(max2)
>     queue : | WWCS(norm1) | WWCS(max2) |
> --> Process WWCS(norm1)
>     Winow state (max) != target state (norm)
>     Set window state to norm and generate WWCS(norm2)
>     queue : | WWCS(max2) | WWCS(norm2) |
> --> Process WWCS(max2)
>     Winow state (norm) != target state (max)
>     Set window state to max and generate WWCS(max3)
>     queue : | WWCS(norm2) | WWCS(max3) |
> --> Process WWCS(norm2)
>     Winow state (max) != target state (norm)
>     Set window state to norm and generate WWCS(norm3)
>     queue : | WWCS(max3) | WWCS(norm3) |
> :
> (loop forever)
>

I just did some more study on the code of multiwindow window manager and
X11 Window Properties as well as the questions you brought up.

The first question :

> it should check the message type as well, as e.g.
> a different type mesage could cause WM_WM_CHANGE_STYLE to be ignored.

Not sure what the "type" of a message means.
Do you mean window manager message WM_xxxxx that is processed by
winMultiWindowWMProc() where it is alreadychecked in HaveMessage(),
or do you mean X message XCB_xxxxxx that is processed by
winMultiWindowXMsgProc()?
Maybe you can provide an example of another message type?

The second question:

> Successive WM_WM_CHANGE_STATE messages cancel out each other
> isn't always true ex. _NET_WM_STATE_ADD _NET_WM_STATE_MAXIMIZED_VERT
> followed by _NET_WM_STATE_ADD _NET_WM_STATE_MAXIMIZED_HORZ.

Inspecting the code that deal with XCB_CLIENT_MESSAGE, it seems already
true before the patch: The window goes maximized only if X client do one
_WM_STATE_ADD action with _NET_WM_STATE_MAXIMIZED_VERT and
_NET_WM_STATE_MAXIMIZED_HORZ simultaneously specified. Otherwise,
the WM_WM_CHANGE would not be sent to the queue.
Further, in UpdateWindowState(), the state and related X properties are
either all-overwritten or all-skipped.
There seems to be no state property half-update case if we skip
UpdateWindowState().

In anyway, I just came out somewhat different patch attached.
Where it just skips the Win32 ShowWindow() call instead of
skipping processing WM_WM_CHANGE_STATE. It might be better because
the X properties are still always updated in each in WM_WM_CHANGE_STATE.
Maybe you could provide further comment.

SL

--00000000000005fcba05de625b8a
Content-Type: application/x-patch; name="flicker2b.patch"
Content-Disposition: attachment; filename="flicker2b.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_l2v6rrax0>
X-Attachment-Id: f_l2v6rrax0

ZGlmZiAtLWdpdCBhL2h3L3h3aW4vd2lubXVsdGl3aW5kb3d3bS5jIGIvaHcveHdpbi93aW5tdWx0
aXdpbmRvd3dtLmMKaW5kZXggN2VlZTJmYi4uYjJlNWRjOSAxMDA2NDQKLS0tIGEvaHcveHdpbi93
aW5tdWx0aXdpbmRvd3dtLmMKKysrIGIvaHcveHdpbi93aW5tdWx0aXdpbmRvd3dtLmMKQEAgLTE1
Myw2ICsxNTMsOSBAQCBzdGF0aWMgdm9pZAogCiBzdGF0aWMgV01Nc2dOb2RlUHRyIFBvcE1lc3Nh
Z2UoV01Nc2dRdWV1ZVB0ciBwUXVldWUsIFdNSW5mb1B0ciBwV01JbmZvKTsKIAorc3RhdGljIEJv
b2wKKyBIYXZlTWVzc2FnZShXTU1zZ1F1ZXVlUHRyIHBRdWV1ZSwgVUlOVCBtc2csIHhjYl93aW5k
b3dfdCBpV2luZG93KTsKKwogc3RhdGljIEJvb2wKICBJbml0UXVldWUoV01Nc2dRdWV1ZVB0ciBw
UXVldWUpOwogCkBAIC0zMTksNyArMzIyLDYgQEAgUG9wTWVzc2FnZShXTU1zZ1F1ZXVlUHRyIHBR
dWV1ZSwgV01JbmZvUHRyIHBXTUluZm8pCiAgICAgcmV0dXJuIHBOb2RlOwogfQogCi0jaWYgMAog
LyoKICAqIEhhdmVNZXNzYWdlIC0KICAqLwpAQCAtMzMxLDEyICszMzMsMTEgQEAgSGF2ZU1lc3Nh
Z2UoV01Nc2dRdWV1ZVB0ciBwUXVldWUsIFVJTlQgbXNnLCB4Y2Jfd2luZG93X3QgaVdpbmRvdykK
IAogICAgIGZvciAocE5vZGUgPSBwUXVldWUtPnBIZWFkOyBwTm9kZSAhPSBOVUxMOyBwTm9kZSA9
IHBOb2RlLT5wTmV4dCkgewogICAgICAgICBpZiAocE5vZGUtPm1zZy5tc2cgPT0gbXNnICYmIHBO
b2RlLT5tc2cuaVdpbmRvdyA9PSBpV2luZG93KQotICAgICAgICAgICAgcmV0dXJuIFRydWU7Cisg
ICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICB9CiAKLSAgICByZXR1cm4gRmFsc2U7CisgICAg
cmV0dXJuIEZBTFNFOwogfQotI2VuZGlmCiAKIC8qCiAgKiBJbml0UXVldWUgLSBJbml0aWFsaXpl
IHRoZSBXaW5kb3cgTWFuYWdlciBtZXNzYWdlIHF1ZXVlCkBAIC03NDgsMTIgKzc0OSwxMiBAQCBV
cGRhdGVTdHlsZShXTUluZm9QdHIgcFdNSW5mbywgeGNiX3dpbmRvd190IGlXaW5kb3csIHVuc2ln
bmVkIGxvbmcgKm1heG1pbikKICAqLwogCiBzdGF0aWMgdm9pZAotVXBkYXRlU3RhdGUoV01JbmZv
UHRyIHBXTUluZm8sIHhjYl93aW5kb3dfdCBpV2luZG93LCBpbnQgc3RhdGUpCitVcGRhdGVTdGF0
ZShXTUluZm9QdHIgcFdNSW5mbywgeGNiX3dpbmRvd190IGlXaW5kb3csIGludCBzdGF0ZSwgQk9P
TCBiU2hvdykKIHsKICAgICBIV05EIGhXbmQ7CiAgICAgaW50IGN1cnJlbnRfc3RhdGUgPSAtMTsK
IAotICAgIHdpbkRlYnVnKCJVcGRhdGVTdGF0ZTogaVdpbmRvdyAweCUwOHggJWRcbiIsIChpbnQp
aVdpbmRvdywgc3RhdGUpOworICAgIHdpbkRlYnVnKCJVcGRhdGVTdGF0ZTogaVdpbmRvdyAweCUw
OHggJWQgJWRcbiIsIChpbnQpaVdpbmRvdywgc3RhdGUsIChpbnQpIGJTaG93KTsKIAogICAgIGhX
bmQgPSBnZXRId25kKHBXTUluZm8sIGlXaW5kb3cpOwogICAgIGlmIChoV25kKQpAQCAtNzY0LDI5
ICs3NjUsMzYgQEAgVXBkYXRlU3RhdGUoV01JbmZvUHRyIHBXTUluZm8sIHhjYl93aW5kb3dfdCBp
V2luZG93LCBpbnQgc3RhdGUpCiAgICAgICAgICAgICBpZiAoY3VycmVudF9zdGF0ZSA9PSBzdGF0
ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgICAgIC8vIFRoZXJlIHdvdWxk
IGJlIHNtYWxsIGludGVydmFsIHRoYXQgdmFyaWFibGUgJ3N0YXRlJyBkb2VzIG5vdAorICAgICAg
ICAgICAgLy8gbWF0Y2ggdG8gV2luZG93cyB3aW5kb3cgc3RhdGUgaWYgYlNob3c9PTAKKyAgICAg
ICAgICAgIC8vIEJ1dCBtZWFud2hpbGUgdGhlcmUgc2hvdWxkIGJlIGEgYW5vdGhlciBXTV9XTV9D
SEFOR0UgcGVuZGluZworICAgICAgICAgICAgLy8gYW5kIHNvb24gdGhlIFdpbmRvd3Mgc3RhdGUg
d2lsbCBiZSB1cGRhdGVkCiAgICAgICAgICAgICBTZXRQcm9wKGhXbmQsIFdJTl9TVEFURV9QUk9Q
LCAoSEFORExFKShpbnRwdHJfdClzdGF0ZSk7CiAKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgWENCX0lDQ0NNX1dNX1NU
QVRFX0lDT05JQzoKLSAgICAgICAgICAgICAgICAgICAgU2hvd1dpbmRvdyhoV25kLCBTV19TSE9X
TUlOTk9BQ1RJVkUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotI2RlZmluZSBYQ0Jf
SUNDQ01fV01fU1RBVEVfWk9PTSAyCi0gICAgICAgICAgICAgICAgY2FzZSBYQ0JfSUNDQ01fV01f
U1RBVEVfWk9PTToKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgZG9lc24ndCBzZWVtIHRv
IGJlIGEgU1dfU0hPV01BWE5PQUNUSVZFLiAgSG9wZWZ1bGx5Ci0gICAgICAgICAgICAgICAgICAg
IC8vIGFsd2F5cyBhY3RpdmF0aW5nIGEgbWF4aW1pemVkIHdpbmRvdyBpc24ndCBzbyBiYWQuLi4K
LSAgICAgICAgICAgICAgICAgICAgU2hvd1dpbmRvdyhoV25kLCBTV19TSE9XTUFYSU1JWkVEKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFhDQl9J
Q0NDTV9XTV9TVEFURV9OT1JNQUw6Ci0gICAgICAgICAgICAgICAgICAgIFNob3dXaW5kb3coaFdu
ZCwgU1dfU0hPV05PQUNUSVZBVEUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgICAgIGNhc2UgWENCX0lDQ0NNX1dNX1NUQVRFX1dJVEhEUkFXTjoKLSAgICAgICAg
ICAgICAgICAgICAgU2hvd1dpbmRvdyhoV25kLCBTV19ISURFKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoYlNob3cpIHsKKwor
ICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBYQ0JfSUNDQ01fV01fU1RBVEVfSUNPTklDOgorICAgICAg
ICAgICAgICAgICAgICAgICAgU2hvd1dpbmRvdyhoV25kLCBTV19TSE9XTUlOTk9BQ1RJVkUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAjZGVmaW5lIFhDQl9JQ0NDTV9X
TV9TVEFURV9aT09NIDIKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBYQ0JfSUNDQ01fV01fU1RB
VEVfWk9PTToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGRvZXNuJ3Qgc2VlbSB0
byBiZSBhIFNXX1NIT1dNQVhOT0FDVElWRS4gIEhvcGVmdWxseQorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYWx3YXlzIGFjdGl2YXRpbmcgYSBtYXhpbWl6ZWQgd2luZG93IGlzbid0IHNvIGJh
ZC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgU2hvd1dpbmRvdyhoV25kLCBTV19TSE9XTUFY
SU1JWkVEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgWENCX0lDQ0NNX1dNX1NUQVRFX05PUk1BTDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFNob3dXaW5kb3coaFduZCwgU1dfU0hPV05PQUNUSVZBVEUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBYQ0JfSUNDQ01f
V01fU1RBVEVfV0lUSERSQVdOOgorICAgICAgICAgICAgICAgICAgICAgICAgU2hvd1dpbmRvdyho
V25kLCBTV19ISURFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgIC8vIFVwZGF0ZSBX
TV9TVEFURSBwcm9wZXJ0eQpAQCAtMTAxMiw3ICsxMDIwLDcgQEAgd2luTXVsdGlXaW5kb3dXTVBy
b2Modm9pZCAqcEFyZykKICAgICAgICAgICAgIFVwZGF0ZVdpbmRvdyhwTm9kZS0+bXNnLmh3bmRX
aW5kb3cpOwogCiAgICAgICAgICAgICAvKiBFc3RhYmxpc2ggaW5pdGlhbCBzdGF0ZSAqLwotICAg
ICAgICAgICAgVXBkYXRlU3RhdGUocFdNSW5mbywgcE5vZGUtPm1zZy5pV2luZG93LCBYQ0JfSUND
Q01fV01fU1RBVEVfTk9STUFMKTsKKyAgICAgICAgICAgIFVwZGF0ZVN0YXRlKHBXTUluZm8sIHBO
b2RlLT5tc2cuaVdpbmRvdywgWENCX0lDQ0NNX1dNX1NUQVRFX05PUk1BTCwgVFJVRSk7CiAKICAg
ICAgICAgICAgIC8qCiAgICAgICAgICAgICAgIEl0IG9ubHkgbWFrZXMgc2Vuc2UgdG8gYXBwbHkg
bWluaW1pemUvbWF4aW1pemUgb3ZlcnJpZGUgYXMgdGhlCkBAIC0xMTczLDcgKzExODEsMTEgQEAg
d2luTXVsdGlXaW5kb3dXTVByb2Modm9pZCAqcEFyZykKICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGNhc2UgV01fV01fQ0hBTkdFX1NUQVRFOgotICAgICAgICAgICAgVXBkYXRlU3RhdGUo
cFdNSW5mbywgcE5vZGUtPm1zZy5pV2luZG93LCBwTm9kZS0+bXNnLmR3SUQpOworICAgICAgICAg
ICAgaWYoSGF2ZU1lc3NhZ2UoJnBXTUluZm8tPndtTXNnUXVldWUsIHBOb2RlLT5tc2cubXNnLCBw
Tm9kZS0+bXNnLmlXaW5kb3cpKQorICAgICAgICAgICAgICAgIFVwZGF0ZVN0YXRlKHBXTUluZm8s
IHBOb2RlLT5tc2cuaVdpbmRvdywgcE5vZGUtPm1zZy5kd0lELCBGQUxTRSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgVXBkYXRlU3RhdGUocFdNSW5mbywgcE5vZGUtPm1zZy5p
V2luZG93LCBwTm9kZS0+bXNnLmR3SUQsIFRSVUUpOworCiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBkZWZhdWx0Ogo=
--00000000000005fcba05de625b8a
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

--00000000000005fcba05de625b8a--

- Raw text -


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