Fixed missing error code handling for winsock

Martin Gerhardy <[email protected]> Mon, 28 Nov 2016 11:34:24 +0000
Newsgroups gmane.comp.java.ikvm.devel
Message-ID <0598D786697B0A42AAEE93449381605340654D5B@srv024038.bigpoint.local>
--_004_0598D786697B0A42AAEE93449381605340654D5Bsrv024038bigpoi_
Content-Type: multipart/alternative;
	boundary="_000_0598D786697B0A42AAEE93449381605340654D5Bsrv024038bigpoi_"

--_000_0598D786697B0A42AAEE93449381605340654D5Bsrv024038bigpoi_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Compared to the SocketChannelImpl::read this should fix issues with two win=
sock error codes. One is the interrupt signal and one is wouldblock signal

compare also against the openjdk code for bsd sockets: (NET_Read in linux_c=
lose.c)

/*
 * Macro to perform a blocking IO operation. Restarts
 * automatically if interrupted by signal (other than
 * our wakeup signal)
 */
#define BLOCKING_IO_RETURN_INT(FD, FUNC) {      \
    int ret;                                    \
    threadEntry_t self;                         \
    fdEntry_t *fdEntry =3D getFdEntry(FD);        \
    if (fdEntry =3D=3D NULL) {                      \
        errno =3D EBADF;                          \
        return -1;                              \
    }                                           \
    do {                                        \
        startOp(fdEntry, &self);                \
        ret =3D FUNC;                             \
        endOp(fdEntry, &self);                  \
    } while (ret =3D=3D -1 && errno =3D=3D EINTR);      \
    return ret;                                 \
}

the Winsock code is now doing the same.

Regards
Martin

--_000_0598D786697B0A42AAEE93449381605340654D5Bsrv024038bigpoi_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html dir=3D"ltr">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
1">
<style id=3D"owaParaStyle" type=3D"text/css">P {margin-top:0;margin-bottom:=
0;}</style>
</head>
<body ocsi=3D"0" fpstyle=3D"1">
<div style=3D"direction: ltr;font-family: Tahoma;color: #000000;font-size: =
10pt;">Compared to the SocketChannelImpl::read this should fix issues with =
two winsock error codes. One is the interrupt signal and one is wouldblock =
signal<br>
<br>
compare also against the openjdk code for bsd sockets: (NET_Read in linux_c=
lose.c)<br>
<br>
/*<br>
&nbsp;* Macro to perform a blocking IO operation. Restarts<br>
&nbsp;* automatically if interrupted by signal (other than<br>
&nbsp;* our wakeup signal)<br>
&nbsp;*/<br>
#define BLOCKING_IO_RETURN_INT(FD, FUNC) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<=
br>
&nbsp;&nbsp;&nbsp; int ret;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp; \<br>
&nbsp;&nbsp;&nbsp; threadEntry_t self;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br>
&nbsp;&nbsp;&nbsp; fdEntry_t *fdEntry =3D getFdEntry(FD);&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp; \<br>
&nbsp;&nbsp;&nbsp; if (fdEntry =3D=3D NULL) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; \<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errno =3D EBADF;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p; \<br>
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br>
&nbsp;&nbsp;&nbsp; do {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startOp(fdEntry, &amp;self);&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp; \<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret =3D FUNC;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
\<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endOp(fdEntry, &amp;self);&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; \<br>
&nbsp;&nbsp;&nbsp; } while (ret =3D=3D -1 &amp;&amp; errno =3D=3D EINTR);&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp; \<br>
&nbsp;&nbsp;&nbsp; return ret;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<=
br>
}<br>
<br>
the Winsock code is now doing the same.<br>
<br>
Regards<br>
Martin<br>
</div>
</body>
</html>

--_000_0598D786697B0A42AAEE93449381605340654D5Bsrv024038bigpoi_--

--_004_0598D786697B0A42AAEE93449381605340654D5Bsrv024038bigpoi_
Content-Type: text/x-patch; name="0001-handle-Winsock.WSAEWOULDBLOCK.patch"
Content-Description: 0001-handle-Winsock.WSAEWOULDBLOCK.patch
Content-Disposition: attachment;
	filename="0001-handle-Winsock.WSAEWOULDBLOCK.patch"; size=1753;
	creation-date="Mon, 28 Nov 2016 11:31:29 GMT";
	modification-date="Mon, 28 Nov 2016 11:31:29 GMT"
Content-Transfer-Encoding: base64

RnJvbSAyNWU1NWQxYmJlN2JmMDJjODVkZGFiZjc2ZjhjZWMwMzQ5MThmYjA5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gR2VyaGFyZHkgPG1hcnRpbi5nZXJoYXJkeUBnbWFp
bC5jb20+CkRhdGU6IEZyaSwgMjUgTm92IDIwMTYgMTc6NTY6NDcgKzAxMDAKU3ViamVjdDogW1BB
VENIXSBoYW5kbGUgV2luc29jay5XU0FFV09VTERCTE9DSwoKLS0tCiBydW50aW1lL29wZW5qZGsv
amF2YS5uZXQuU29ja2V0SW5wdXRTdHJlYW0uY3MgfCAxNyArKysrKysrKysrKysrKysrLQogMSBm
aWxlIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQg
YS9ydW50aW1lL29wZW5qZGsvamF2YS5uZXQuU29ja2V0SW5wdXRTdHJlYW0uY3MgYi9ydW50aW1l
L29wZW5qZGsvamF2YS5uZXQuU29ja2V0SW5wdXRTdHJlYW0uY3MKaW5kZXggODAwZWI0Zi4uOGMz
N2ZjOCAxMDA2NDQKLS0tIGEvcnVudGltZS9vcGVuamRrL2phdmEubmV0LlNvY2tldElucHV0U3Ry
ZWFtLmNzCisrKyBiL3J1bnRpbWUvb3Blbmpkay9qYXZhLm5ldC5Tb2NrZXRJbnB1dFN0cmVhbS5j
cwpAQCAtNzUsNyArNzUsMTEgQEAgc3RhdGljIGNsYXNzIEphdmFfamF2YV9uZXRfU29ja2V0SW5w
dXRTdHJlYW0KIAkJCX0KIAkJfQogCi0JCW5yZWFkID0gV2luc29jay5yZWN2KHNvY2tldCwgYiwg
b2ZmLCBsZW4sIDApOworCQkvLyB0cnkgYWdhaW4gaWYgd2UgZ290IGFuIGludGVycnVwdCB3aGls
ZSByZWFkaW5nCisJCWRvIHsKKwkJCW5yZWFkID0gV2luc29jay5yZWN2KHNvY2tldCwgYiwgb2Zm
LCBsZW4sIDApOworCQl9IHdoaWxlIChucmVhZCA9PSAtMSAmJiBXaW5zb2NrLldTQUdldExhc3RF
cnJvcigpID09IFdpbnNvY2suV1NBRUlOVFIpOworCiAJCWlmIChucmVhZCA+IDApCiAJCXsKIAkJ
CS8vIG9rCkBAIC0xMDMsNiArMTA3LDE3IEBAIHN0YXRpYyBjbGFzcyBKYXZhX2phdmFfbmV0X1Nv
Y2tldElucHV0U3RyZWFtCiAJCQkJCWNhc2UgV2luc29jay5XU0FFVElNRURPVVQ6CiAJCQkJCQl0
aHJvdyBuZXcgU29ja2V0VGltZW91dEV4Y2VwdGlvbigiUmVhZCB0aW1lZCBvdXQiKTsKIAorCQkJ
CQkvKioKKwkJCQkJICogUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUuCisJCQkJCSAq
IFRoaXMgZXJyb3IgaXMgcmV0dXJuZWQgZnJvbSBvcGVyYXRpb25zIG9uIG5vbmJsb2NraW5nIHNv
Y2tldHMgdGhhdCBjYW5ub3QgYmUgY29tcGxldGVkIGltbWVkaWF0ZWx5LAorCQkJCQkgKiBmb3Ig
ZXhhbXBsZSByZWN2IHdoZW4gbm8gZGF0YSBpcyBxdWV1ZWQgdG8gYmUgcmVhZCBmcm9tIHRoZSBz
b2NrZXQuIEl0IGlzIGEgbm9uZmF0YWwgZXJyb3IsIGFuZCB0aGUKKwkJCQkJICogb3BlcmF0aW9u
IHNob3VsZCBiZSByZXRyaWVkIGxhdGVyLiBJdCBpcyBub3JtYWwgZm9yIFdTQUVXT1VMREJMT0NL
IHRvIGJlIHJlcG9ydGVkIGFzIHRoZSByZXN1bHQgZnJvbQorCQkJCQkgKiBjYWxsaW5nIGNvbm5l
Y3Qgb24gYSBub25ibG9ja2luZyBTT0NLX1NUUkVBTSBzb2NrZXQsIHNpbmNlIHNvbWUgdGltZSBt
dXN0IGVsYXBzZSBmb3IgdGhlIGNvbm5lY3Rpb24KKwkJCQkJICogdG8gYmUgZXN0YWJsaXNoZWQu
CisJCQkJCSAqLworCQkJCQljYXNlIFdpbnNvY2suV1NBRVdPVUxEQkxPQ0s6CisJCQkJCQlyZXR1
cm4gMDsKKwogCQkJCQlkZWZhdWx0OgogCQkJCQkJdGhyb3cgbmV0X3V0aWxfbWQuTkVUX1Rocm93
Q3VycmVudCgicmVjdiBmYWlsZWQiKTsKIAkJCQl9Ci0tIAoyLjEwLjIKCg==

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

------------------------------------------------------------------------------

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

_______________________________________________
Ikvm-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ikvm-developers

--_004_0598D786697B0A42AAEE93449381605340654D5Bsrv024038bigpoi_--