delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2011/01/27/14:25:52

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,T_FRT_STOCK2,T_TO_NO_BRKTS_FREEMAIL
X-Spam-Check-By: sourceware.org
MIME-Version: 1.0
Date: Thu, 27 Jan 2011 20:25:36 +0100
Message-ID: <AANLkTimQzJHoawFjkygvbD4FDkKoaTgj4gNUrfAeLNjz@mail.gmail.com>
Subject: pthread_cancel+pthread_join problems when a thread executes "accept" TCP function
From: jdzstz - gmail dot com <jdzstz AT gmail DOT com>
To: cygwin AT cygwin DOT com
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

--00163631008dfe79ce049ad8e956
Content-Type: text/plain; charset=ISO-8859-1

I have detected an issue with pthread_join when the thread is
executing "accept" TCP function.

If a thread is blocked in an accept TCP call, and a "pthread_cancel"
and "pthread_join" are called from parent, in cygwin, the
"pthread_join" is blocked forever until "accept" ends (that maybe
never end) so the program gets blocked forever.  In Linux and Solaris,
it works fine (see below)

The problem is happening in one of the tools of varnish cache program.
I have extracted part of the code and created program test.

The program does the following:
   1.  calls   socket(AF_INET, SOCK_STREAM, 0);  ,   bind(sd, (struct
sockaddr *) &saddr, sizeof(saddr)   and listen(sock, 1)
   2.  execute  rc = pthread_create(&thr, NULL, server_thread, (void *)t);
   3.  server_thread => executes "accept" and gets blocked until
somebody connects to port.
   4.  server_thread => if receives an incomming conection, closes the
connection and exits.
   5.  main thread => execute sleep x seconds (program argument)
   6.  main thread => execute pthread_cancel  and pthread_join
   7.  main thread => closes socket

I have made some tests in Linux 2.6.16.60 , Solaris 10, Cygwin 1.7.7
and Cygwin 1.7.8s(0.235/5/3) 20110114

* In Linux, when "pthread_cancel"+"pthread_join" are executed, if
thread is blocked in accept call, it is destroyed immediately,
"pthread_join" returns 0. and tread returns "0xffffffffffffffff"
* In Solaris, when "pthread_cancel"+"pthread_join" are executed, if
thread is blocked in accept call, accept is aborted and returns error,
but rest of thread is executed ok, and pthread_join ends when thread
returns.
* In Cygwin (both versions), when "pthread_cancel"+"pthread_join" are
executed, if thread is blocked in accept call, pthread_join is also
blocked, forever (or until accept is unblocked)

==== SOLARIS ====
$ /tmp/thread_accept_test 10
Start main
Opening socket on 0.0.0.0 61002
Main: Creating thread
Start sleep
Starting server thread, executing "accept"
End sleep
pthread_cancel
Waiting for server
Accepted failed: Error 0
Ending thread
Server returned "NULL"
End main
$

==== LINUX ====
$ /tmp/thread_accept_test 10
Start main
Opening socket on 0.0.0.0 50636
Main: Creating thread
Start sleep
Starting server thread, executing "accept"
End sleep
pthread_cancel
Waiting for server
Server returned "0xffffffffffffffff"
End main
$

==== CYGWIN ====
$ /tmp/thread_accept_test.exe 10
Start main
Opening socket on 0.0.0.0 3940
Main: Creating thread
Starting server thread, executing "accept"
Start sleep
End sleep
pthread_cancel
Waiting for server

<it never ends>


After searching solutions in google, I founded a workaround for
cygwin, if I send a signal to thread, it unblocks "accept" call:
(void)pthread_kill(thr,SIGUSR1);

--00163631008dfe79ce049ad8e956
Content-Type: text/x-csrc; charset=US-ASCII; name="thread_accept_test.c"
Content-Disposition: attachment; filename="thread_accept_test.c"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_gjg0y8zj0

CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8cHRocmVhZC5oPgojaW5j
bHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8
dW5pc3RkLmg+CiNpbmNsdWRlIDxhc3NlcnQuaD4KI2luY2x1ZGUgPHN0cmlu
Zy5oPiAKCiNpbmNsdWRlIDxuZXRkYi5oPgojaW5jbHVkZSA8cG9sbC5oPgoK
aW50IHNlY29uZHM7CmludCBzb2NrOwoKLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKICogTGlzdGVuIHRvIHBvcnQKICovCgppbnQKbGlzdGVuX3BvcnQo
KQp7CgkKCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlczAsICpyZXM7Cglp
bnQgaSwgcmV0OwoKCWludCBzZCwgdmFsOwoKCXNkID0gc29ja2V0KEFGX0lO
RVQsIFNPQ0tfU1RSRUFNLCAwKTsKCWlmIChzZCA8IDApIHsKCQlwZXJyb3Io
InNvY2tldCgpIik7CgkJcmV0dXJuICgtMSk7Cgl9Cgl2YWwgPSAxOwoJCglp
ZiAoc2V0c29ja29wdChzZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAm
dmFsLCBzaXplb2YgdmFsKSAhPSAwKSB7CgkJcGVycm9yKCJzZXRzb2Nrb3B0
KFNPX1JFVVNFQUREUiwgMSkiKTsKCQkodm9pZCljbG9zZShzZCk7CgkJcmV0
dXJuICgtMSk7Cgl9CgoJc3RydWN0IHNvY2thZGRyX2luIHNhZGRyOwoJYnpl
cm8oKGNoYXIgKikgJnNhZGRyLCBzaXplb2Yoc2FkZHIpKTsKCXNhZGRyLnNp
bl9mYW1pbHkgICAgICA9IEFGX0lORVQ7CglzYWRkci5zaW5fYWRkci5zX2Fk
ZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKCXNhZGRyLnNpbl9wb3J0ICAgICAg
ICA9IGh0b25zKDApOwoJCglpZiAoYmluZChzZCwgKHN0cnVjdCBzb2NrYWRk
ciAqKSAmc2FkZHIsIHNpemVvZihzYWRkcikpIDwgMCkgCgl7CgkJcGVycm9y
KCJiaW5kKCkiKTsKCQkodm9pZCljbG9zZShzZCk7CgkJcmV0dXJuICgtMSk7
Cgl9CglyZXR1cm4gKHNkKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioKICogU2VydmVyIFRocmVhZAogKi8KCnN0YXRpYyB2b2lkICoKc2VydmVy
X3RocmVhZCh2b2lkICpwcml2KQp7CglzdHJ1Y3QgdnRjbG9nICp2bDsKCWlu
dCBpLCBqLCBmZDsKCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHJfczsK
CXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKCXNvY2tsZW5fdCBsOwoKCWFzc2Vy
dChzb2NrID49IDApOwoKCXByaW50ZigiU3RhcnRpbmcgc2VydmVyIHRocmVh
ZCwgZXhlY3V0aW5nIFwiYWNjZXB0XCJcbiIpOwoKCWFkZHIgPSAodm9pZCop
JmFkZHJfczsKCWwgPSBzaXplb2YgYWRkcl9zOwoJZmQgPSBhY2NlcHQoc29j
aywgYWRkciwgJmwpOwoJaWYgKGZkIDwgMCkKCXsKCQlwcmludGYoICJBY2Nl
cHRlZCBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwoJfQoJZWxz
ZQoJewoJCXByaW50ZiggImFjY2VwdGVkIGZkICVkXG4iLCBmZCk7CgkJLy9o
dHRwX3Byb2Nlc3MgKHJlbW92ZWQpCgkJcHJpbnRmKCAic2h1dHRpbmcgZmQg
JWRcbiIsIGZkKTsKCQlqID0gc2h1dGRvd24oZmQsIFNIVVRfV1IpOwoJCWlm
ICghKChqKSA9PSAwIHx8IGVycm5vID09IEVDT05OUkVTRVQgfHwgZXJybm8g
PT0gRU5PVENPTk4pKQoJCQlwcmludGYoICJTaHV0ZG93biBmYWlsZWQ6ICVz
XG4iLCBzdHJlcnJvcihlcnJubykpOwoJCQoJCWkgPSBjbG9zZShmZCk7CgkJ
cHJpbnRmKCAiY2xvc2VkIGZkICVkXG4iLCBmZCk7CgkJYXNzZXJ0ICgoKGkp
ID09IDAgfHwgZXJybm8gPT0gRUNPTk5SRVNFVCB8fCBlcnJubyA9PSBFTk9U
Q09OTikpOwoJfQoJCglwcmludGYoIkVuZGluZyB0aHJlYWRcbiIpOwoJcmV0
dXJuIChOVUxMKTsKfQoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAq
IE1haW4KICovCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7
CglpZihhcmdjIT0yKQoJewoJCXByaW50ZigiJXMgPHNlY29uZHM+XG4iLGFy
Z3ZbMF0pOwoJCXJldHVybjsKCX0KCWVsc2UKCXsKCQlzZWNvbmRzPWF0b2ko
YXJndlsxXSk7Cgl9CgoJcHJpbnRmKCAiU3RhcnQgbWFpblxuIik7Cglzb2Nr
ID0gbGlzdGVuX3BvcnQoKTsKCWlmIChzb2NrID49IDApICB7CgkJaWYgKGxp
c3Rlbihzb2NrLCAxKSAhPSAwKSB7CgkJCXBlcnJvcigibGlzdGVuKCkiKTsK
CQkJKHZvaWQpY2xvc2Uoc29jayk7CgkJCXJldHVybiAoLTEpOwoJCX0KCX0K
CglzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyX3M7Cglzb2NrbGVuX3Qg
bDsKCglsID0gc2l6ZW9mIGFkZHJfczsKCWdldHNvY2tuYW1lKHNvY2ssICh2
b2lkICopJmFkZHJfcywgJmwpOwoJCglpbnQgaTsKCWNoYXIgYWFkZHJbMzJd
OwoJY2hhciBhcG9ydFszMl07CgoJaSA9IGdldG5hbWVpbmZvKChjb25zdCB2
b2lkICopJmFkZHJfcywgbCwgYWFkZHIsIHNpemVvZiBhYWRkciwgYXBvcnQs
IHNpemVvZiBhcG9ydCxOSV9OVU1FUklDSE9TVCB8IE5JX05VTUVSSUNTRVJW
KTsKCWlmIChpKSB7CgkJcHJpbnRmKCJnZXRuYW1laW5mbyA9ICVkICVzXG4i
LCBpLCBnYWlfc3RyZXJyb3IoaSkpOwoJCXJldHVybjsKCX0KCQoJcHJpbnRm
KCAiT3BlbmluZyBzb2NrZXQgb24gJXMgJXNcbiIsIGFhZGRyLCBhcG9ydCk7
CgoJcHRocmVhZF90IHRocjsKCWludCByYzsKCWxvbmcgdDsKCglwcmludGYo
Ik1haW46IENyZWF0aW5nIHRocmVhZFxuIiwgdCk7CglyYyA9IHB0aHJlYWRf
Y3JlYXRlKCZ0aHIsIE5VTEwsIHNlcnZlcl90aHJlYWQsICh2b2lkICopdCk7
CglpZiAocmMpCgl7CgkJcHJpbnRmKCJFUlJPUjsgcmV0dXJuIGNvZGUgZnJv
bSBwdGhyZWFkX2NyZWF0ZSgpIGlzICVkXG4iLCByYyk7CgkJZXhpdCgtMSk7
Cgl9CgkKCXByaW50ZigiU3RhcnQgc2xlZXBcbiIpOwoJc2xlZXAoc2Vjb25k
cyk7CglwcmludGYoIkVuZCBzbGVlcFxuIik7CgkKCXByaW50ZigicHRocmVh
ZF9jYW5jZWxcbiIpOwoJKHZvaWQpcHRocmVhZF9jYW5jZWwodGhyKTsKCS8v
KHZvaWQpcHRocmVhZF9raWxsKHRocixTSUdVU1IxKTsKCgl2b2lkICpyZXM7
CgoJcHJpbnRmKCJXYWl0aW5nIGZvciBzZXJ2ZXJcbiIpOwoJcmM9cHRocmVh
ZF9qb2luKHRociwgJnJlcyk7CglpZiAocmMpCgl7CgkJcHJpbnRmKCJFUlJP
UjsgcmV0dXJuIGNvZGUgZnJvbSBwdGhyZWFkX2pvaW4oKSBpcyAlZFxuIiwg
cmMpOwoJfQoJaWYgKHJlcyAhPSBOVUxMKQoJCXByaW50ZiggIlNlcnZlciBy
ZXR1cm5lZCBcIiVwXCJcbiIsKGNoYXIgKilyZXMpOwoJCSAgICAKCWludCBq
OwkKCWogPSBjbG9zZShzb2NrKTsKCWFzc2VydCAoKChqKSA9PSAwIHx8IGVy
cm5vID09IEVDT05OUkVTRVQgfHwgZXJybm8gPT0gRU5PVENPTk4pKTsKCglw
cmludGYoIkVuZCBtYWluXG4iKTsKCXJldHVybjsKfQo=


--00163631008dfe79ce049ad8e956
Content-Type: text/plain; charset=us-ascii

--
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
--00163631008dfe79ce049ad8e956--

- Raw text -


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