threads/72953: fork() unblocks blocked signals w/o PTHREAD_SC
OPE_SYSTEM
Dong Xuezhang-A19583
xdong at motorola.com
Tue Feb 22 12:00:41 PST 2005
The following reply was made to PR threads/72953; it has been noted by GNATS.
From: Dong Xuezhang-A19583 <xdong at motorola.com>
To: freebsd-gnats-submit at FreeBSD.org, marka at daemon.lab.isc.org
Cc:
Subject: Re: threads/72953: fork() unblocks blocked signals w/o PTHREAD_SC
OPE_SYSTEM
Date: Tue, 22 Feb 2005 12:57:15 -0700
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
------_=_NextPart_001_01C51918.B4EDF491
Content-Type: text/plain
This is not a bug. If you insert a sleep call before the line of kill singal, you will get consistent behavior of "singal 15".
Actually fork() donot copy the properties of singal mask, so it never been a case of singal 15 been blocked. The reason of sometime the singal donot get print out is because of race condition in two thread. The reason it "works" at Linux is because of a BUG in Linux which donot deliver the singal to all threads.
I modify the code to demostrate two thread case and two process case. You will notice that twothread.c will have different behavior in Linux vs. Freebsd.
======= twothread.c==============
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <stdlib.h>
sigset_t signal_mask;
static void *
waiter(void *arg) {
int result;
int sig;
result = sigwait(&signal_mask, &sig);
if (result != 0)
fprintf(stdout, "child thread sigwait: %\n", strerror(result));
else
fprintf(stdout, "child thread signal %d\n", sig);
fflush(stdout);
return (NULL);
}
int
main(int argc, char **argv) {
pthread_t id;
pthread_attr_t attr;
int result;
int scope = 0;
if (argc > 1) {
if (strcmp(argv[1], "system") == 0)
scope = 1;
}
sigemptyset (&signal_mask);
sigaddset (&signal_mask, SIGTERM);
result = sigprocmask(SIG_BLOCK, &signal_mask, NULL);
if (result != 0)
fprintf(stdout, "pthread_sigmask: %\n", strerror(result));
else
fprintf(stdout, "pthread_sigmask: OK\n");
fflush(stdout);
result = pthread_attr_init(&attr);
if (result != 0)
fprintf(stdout, "pthread_attr_init: %\n", strerror(result));
else
fprintf(stdout, "pthread_attr_init: OK\n");
fflush(stdout);
if (scope) {
result = pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
if (result != 0)
fprintf(stdout, "pthread_attr_setscope: %\n",
strerror(result));
else
fprintf(stdout, "pthread_attr_setscope: OK\n");
} else
fprintf(stdout, "default scope\n");
fflush(stdout);
result = pthread_create (&id, &attr, waiter, NULL);
if (result != 0)
fprintf(stdout, "pthread_create: %\n", strerror(result));
else
fprintf(stdout, "pthread_create: OK\n");
fflush(stdout);
sleep(1);
if (kill(getpid(), SIGTERM) == -1)
perror("kill");
else
fprintf(stdout, "kill: OK\n");
fflush(stdout);
result = pthread_join(id, NULL);
if (result != 0)
fprintf(stdout, "pthread_join: %\n", strerror(result));
else
fprintf(stdout, "pthread_join: OK\n");
fflush(stdout);
sleep(1);
return(0);
}
======= twoprocess.c==============
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <stdlib.h>
sigset_t signal_mask;
int childpid;
void
dofork() {
int result;
int sig;
childpid = fork();
switch (childpid) {
case 0:
result = sigwait(&signal_mask, &sig);
if (result != 0)
fprintf(stdout, "sigwait: %\n", strerror(result));
else
fprintf(stdout, "signal %d\n", sig);
fflush(stdout);
_exit(0);
case -1:
// some error
_exit(1);
default:
// parent process
fprintf(stdout, "fork, in parent process\n");
fflush(stdout);
break;
}
}
int
main(int argc, char **argv) {
pthread_t id;
pthread_attr_t attr;
int result;
sigemptyset (&signal_mask);
sigaddset (&signal_mask, SIGTERM);
result = sigprocmask(SIG_BLOCK, &signal_mask, NULL);
if (result != 0)
fprintf(stdout, "pthread_sigmask: %\n", strerror(result));
else
fprintf(stdout, "pthread_sigmask: OK\n");
fflush(stdout);
dofork();
sleep(1);
if (kill(childpid, SIGTERM) == -1)
perror("kill");
else
fprintf(stdout, "kill: OK\n");
fflush(stdout);
return(0);
}
------_=_NextPart_001_01C51918.B4EDF491
Content-Type: text/html
Content-Transfer-Encoding: base64
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv
L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgSFRUUC1FUVVJVj0iQ29udGVudC1UeXBlIiBDT05U
RU5UPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPg0KPFRJVExFPk1lc3NhZ2U8L1RJVExF
Pg0KDQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0OTEiIG5hbWU9R0VORVJBVE9S
PjwvSEVBRD4NCjxCT0RZPg0KPERJVj48Rk9OVCBmYWNlPUFyaWFsIHNpemU9Mj48U1BBTiBjbGFz
cz00OTAwNTQ4MTktMjIwMjIwMDU+VGhpcyBpcyBub3QgYSBidWcuIA0KSWYgeW91IGluc2VydCBh
IHNsZWVwIGNhbGwgYmVmb3JlIHRoZSBsaW5lIG9mIGtpbGwgc2luZ2FsLCB5b3Ugd2lsbCBnZXQg
DQpjb25zaXN0ZW50IGJlaGF2aW9yIG9mICJzaW5nYWwgMTUiLjwvU1BBTj48L0ZPTlQ+PC9ESVY+
DQo8RElWPjxGT05UIGZhY2U9QXJpYWwgc2l6ZT0yPjxTUEFOIGNsYXNzPTQ5MDA1NDgxOS0yMjAy
MjAwNT5BY3R1YWxseSBmb3JrKCkgDQpkb25vdCBjb3B5IHRoZSBwcm9wZXJ0aWVzIG9mIHNpbmdh
bCBtYXNrLCBzbyBpdCBuZXZlciBiZWVuIGEgY2FzZSBvZiBzaW5nYWwgMTUgDQpiZWVuIGJsb2Nr
ZWQuIFRoZSByZWFzb24gb2Ygc29tZXRpbWUgdGhlIHNpbmdhbCBkb25vdCBnZXQgcHJpbnQgb3V0
IGlzIGJlY2F1c2UgDQpvZiByYWNlIGNvbmRpdGlvbiBpbiB0d28gdGhyZWFkLiBUaGUgcmVhc29u
IGl0ICJ3b3JrcyIgYXQgTGludXggaXMgYmVjYXVzZSBvZiBhIA0KQlVHIGluIExpbnV4IHdoaWNo
IGRvbm90IGRlbGl2ZXIgdGhlIHNpbmdhbCB0byBhbGwgdGhyZWFkcy48L1NQQU4+PC9GT05UPjwv
RElWPg0KPERJVj48Rk9OVCBmYWNlPUFyaWFsIHNpemU9Mj48U1BBTiANCmNsYXNzPTQ5MDA1NDgx
OS0yMjAyMjAwNT48L1NQQU4+PC9GT05UPiZuYnNwOzwvRElWPg0KPERJVj48Rk9OVCBmYWNlPUFy
aWFsIHNpemU9Mj48U1BBTiBjbGFzcz00OTAwNTQ4MTktMjIwMjIwMDU+SSBtb2RpZnkgdGhlIGNv
ZGUgdG8gDQpkZW1vc3RyYXRlIHR3byB0aHJlYWQgY2FzZSBhbmQgdHdvIHByb2Nlc3MgY2FzZS4g
WW91IHdpbGwgbm90aWNlIHRoYXQgDQp0d290aHJlYWQuYyB3aWxsIGhhdmUgZGlmZmVyZW50IGJl
aGF2aW9yIGluIExpbnV4IHZzLiANCkZyZWVic2QuPC9TUEFOPjwvRk9OVD48L0RJVj4NCjxESVY+
PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+PFNQQU4gDQpjbGFzcz00OTAwNTQ4MTktMjIwMjIwMDU+
PC9TUEFOPjwvRk9OVD4mbmJzcDs8L0RJVj4NCjxESVY+PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+
PFNQQU4gY2xhc3M9NDkwMDU0ODE5LTIyMDIyMDA1Pj09PT09PT0gDQp0d290aHJlYWQuYz09PT09
PT09PT09PT09PC9TUEFOPjwvRk9OVD48L0RJVj4NCjxESVY+PEZPTlQgZmFjZT1BcmlhbCBzaXpl
PTI+PFNQQU4gY2xhc3M9NDkwMDU0ODE5LTIyMDIyMDA1PiNpbmNsdWRlIA0KJmx0O3B0aHJlYWQu
aCZndDs8QlI+I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OzxCUj4jaW5jbHVkZSANCiZsdDtzdGRp
by5oJmd0OzxCUj4jaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7PEJSPiNpbmNsdWRlIA0KJmx0
O3N5cy93YWl0LmgmZ3Q7PEJSPiNpbmNsdWRlICZsdDtzaWduYWwuaCZndDs8QlI+I2luY2x1ZGUg
DQombHQ7c3RkbGliLmgmZ3Q7PC9TUEFOPjwvRk9OVD48L0RJVj4NCjxESVY+PEZPTlQgZmFjZT1B
cmlhbCBzaXplPTI+PC9GT05UPiZuYnNwOzwvRElWPg0KPERJVj48Rk9OVCBmYWNlPUFyaWFsIHNp
emU9Mj48U1BBTiBjbGFzcz00OTAwNTQ4MTktMjIwMjIwMDU+c2lnc2V0X3QgDQpzaWduYWxfbWFz
azs8L1NQQU4+PC9GT05UPjwvRElWPg0KPERJVj48Rk9OVCBmYWNlPUFyaWFsIHNpemU9Mj48L0ZP
TlQ+Jm5ic3A7PC9ESVY+DQo8RElWPjxGT05UIGZhY2U9QXJpYWwgc2l6ZT0yPjxTUEFOIGNsYXNz
PTQ5MDA1NDgxOS0yMjAyMjAwNT5zdGF0aWMgdm9pZCANCio8QlI+d2FpdGVyKHZvaWQgKmFyZykg
ezxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaW50IA0KcmVz
dWx0OzxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaW50IA0K
c2lnOzwvU1BBTj48L0ZPTlQ+PC9ESVY+DQo8RElWPjxGT05UIGZhY2U9QXJpYWwgc2l6ZT0yPjwv
Rk9OVD4mbmJzcDs8L0RJVj4NCjxESVY+PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+PFNQQU4gDQpj
bGFzcz00OTAwNTQ4MTktMjIwMjIwMDU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7IHJlc3VsdCA9IA0Kc2lnd2FpdCgmYW1wO3NpZ25hbF9tYXNrLCANCiZhbXA7c2ln
KTs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIChyZXN1
bHQgIT0gDQowKTxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQpmcHJpbnRm
KHN0ZG91dCwgImNoaWxkIHRocmVhZCBzaWd3YWl0OiAlXG4iLCANCnN0cmVycm9yKHJlc3VsdCkp
OzxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQplbHNlPEJS
PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCmZwcmludGYoc3Rkb3V0LCAiY2hp
bGQgdGhyZWFkIHNpZ25hbCAlZFxuIiwgDQpzaWcpOzxCUj4mbmJzcDtmZmx1c2goc3Rkb3V0KTs8
QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KcmV0dXJuIChO
VUxMKTs8QlI+fTwvU1BBTj48L0ZPTlQ+PC9ESVY+DQo8RElWPjxGT05UIGZhY2U9QXJpYWwgc2l6
ZT0yPjwvRk9OVD4mbmJzcDs8L0RJVj4NCjxESVY+PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+PFNQ
QU4gY2xhc3M9NDkwMDU0ODE5LTIyMDIyMDA1PmludDxCUj5tYWluKGludCANCmFyZ2MsIGNoYXIg
Kiphcmd2KSB7PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBw
dGhyZWFkX3QgDQppZDs8QlI+Jm5ic3A7cHRocmVhZF9hdHRyX3QgYXR0cjs8QlI+Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KaW50IHJlc3VsdDs8QlI+Jm5ic3A7
aW50IHNjb3BlID0gMDs8L1NQQU4+PC9GT05UPjwvRElWPg0KPERJVj4mbmJzcDs8L0RJVj4NCjxE
SVY+PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+PFNQQU4gDQpjbGFzcz00OTAwNTQ4MTktMjIwMjIw
MDU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIChhcmdjIA0K
Jmd0OyAxKSANCns8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KaWYgKHN0
cmNtcChhcmd2WzFdLCAic3lzdGVtIikgPT0gDQowKTxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsgDQpzY29wZSA9IDE7PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyB9PC9TUEFOPjwvRk9OVD48L0RJVj4NCjxESVY+Jm5ic3A7PC9ESVY+DQo8RElWPjxGT05U
IGZhY2U9QXJpYWwgc2l6ZT0yPjxTUEFOIA0KY2xhc3M9NDkwMDU0ODE5LTIyMDIyMDA1PiZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzaWdlbXB0eXNldCANCigmYW1w
O3NpZ25hbF9tYXNrKTs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7IHNpZ2FkZHNldCANCigmYW1wO3NpZ25hbF9tYXNrLCBTSUdURVJNKTs8L1NQQU4+PC9GT05U
PjwvRElWPg0KPERJVj4mbmJzcDs8L0RJVj4NCjxESVY+PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+
PFNQQU4gDQpjbGFzcz00OTAwNTQ4MTktMjIwMjIwMDU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJlc3VsdCA9IA0Kc2lncHJvY21hc2soU0lHX0JMT0NLLCAmYW1w
O3NpZ25hbF9tYXNrLCANCk5VTEwpOzxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsgaWYgKHJlc3VsdCAhPSANCjApPEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyANCmZwcmludGYoc3Rkb3V0LCAicHRocmVhZF9zaWdtYXNrOiAlXG4iLCANCnN0
cmVycm9yKHJlc3VsdCkpOzxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsgDQplbHNlPEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCmZwcmlu
dGYoc3Rkb3V0LCAicHRocmVhZF9zaWdtYXNrOiANCk9LXG4iKTs8QlI+Jm5ic3A7ZmZsdXNoKHN0
ZG91dCk7PC9TUEFOPjwvRk9OVD48L0RJVj4NCjxESVY+Jm5ic3A7PC9ESVY+DQo8RElWPjxGT05U
IGZhY2U9QXJpYWwgc2l6ZT0yPjxTUEFOIGNsYXNzPTQ5MDA1NDgxOS0yMjAyMjAwNT4mbmJzcDty
ZXN1bHQgPSANCnB0aHJlYWRfYXR0cl9pbml0KCZhbXA7YXR0cik7PEJSPiZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpZiANCihyZXN1bHQgIT0gDQowKTxCUj4mbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQpmcHJpbnRmKHN0ZG91dCwgInB0aHJlYWRf
YXR0cl9pbml0OiAlXG4iLCANCnN0cmVycm9yKHJlc3VsdCkpOzxCUj4mbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQplbHNlPEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyANCmZwcmludGYoc3Rkb3V0LCAicHRocmVhZF9hdHRyX2luaXQ6IA0KT0tc
biIpOzxCUj4mbmJzcDtmZmx1c2goc3Rkb3V0KTs8QlI+Jm5ic3A7PEJSPiZuYnNwO2lmIChzY29w
ZSkgDQp7PEJSPiZuYnNwOyZuYnNwO3Jlc3VsdCA9IHB0aHJlYWRfYXR0cl9zZXRzY29wZSgmYW1w
O2F0dHIsIA0KUFRIUkVBRF9TQ09QRV9TWVNURU0pOzxCUj4mbmJzcDsmbmJzcDtpZiAocmVzdWx0
ICE9IA0KMCk8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7ZnByaW50ZihzdGRvdXQsICJwdGhyZWFkX2F0
dHJfc2V0c2NvcGU6IA0KJVxuIiw8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7c3RyZXJyb3Io
cmVzdWx0KSk7PEJSPiZuYnNwOyZuYnNwO2Vsc2U8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7ZnByaW50
ZihzdGRvdXQsIA0KInB0aHJlYWRfYXR0cl9zZXRzY29wZTogT0tcbiIpOzxCUj4mbmJzcDt9IGVs
c2U8QlI+Jm5ic3A7Jm5ic3A7ZnByaW50ZihzdGRvdXQsIA0KImRlZmF1bHQgc2NvcGVcbiIpOzxC
Uj4mbmJzcDtmZmx1c2goc3Rkb3V0KTs8L1NQQU4+PC9GT05UPjwvRElWPg0KPERJVj4mbmJzcDs8
L0RJVj4NCjxESVY+PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+PFNQQU4gDQpjbGFzcz00OTAwNTQ4
MTktMjIwMjIwMDU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJl
c3VsdCA9IA0KcHRocmVhZF9jcmVhdGUgKCZhbXA7aWQsICZhbXA7YXR0ciwgd2FpdGVyLCANCk5V
TEwpOzxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaWYgKHJl
c3VsdCAhPSANCjApPEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCmZwcmlu
dGYoc3Rkb3V0LCAicHRocmVhZF9jcmVhdGU6ICVcbiIsIA0Kc3RyZXJyb3IocmVzdWx0KSk7PEJS
PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCmVsc2U8QlI+Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KZnByaW50ZihzdGRvdXQsICJwdGhyZWFk
X2NyZWF0ZTogDQpPS1xuIik7PEJSPiZuYnNwO2ZmbHVzaChzdGRvdXQpOzwvU1BBTj48L0ZPTlQ+
PC9ESVY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJVj48Rk9OVCBmYWNlPUFyaWFsIHNpemU9Mj48
U1BBTiANCmNsYXNzPTQ5MDA1NDgxOS0yMjAyMjAwNT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsgDQpzbGVlcCgxKTs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIChraWxsKGdldHBpZCgpLCANClNJR1RFUk0pID09IA0KLTEp
PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCnBlcnJvcigia2lsbCIpOzxC
Uj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQplbHNlPEJSPiZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCmZwcmludGYoc3Rkb3V0LCAia2lsbDog
T0tcbiIpOzxCUj4mbmJzcDtmZmx1c2goc3Rkb3V0KTs8L1NQQU4+PC9GT05UPjwvRElWPg0KPERJ
Vj4mbmJzcDs8L0RJVj4NCjxESVY+PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+PFNQQU4gDQpjbGFz
cz00OTAwNTQ4MTktMjIwMjIwMDU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7IHJlc3VsdCA9IA0KcHRocmVhZF9qb2luKGlkLCBOVUxMKTs8QlI+Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIChyZXN1bHQgDQohPSANCjApPEJSPiZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCmZwcmludGYoc3Rkb3V0LCAicHRocmVh
ZF9qb2luOiAlXG4iLCANCnN0cmVycm9yKHJlc3VsdCkpOzxCUj4mbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQplbHNlPEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyANCmZwcmludGYoc3Rkb3V0LCAicHRocmVhZF9qb2luOiANCk9LXG4iKTs8QlI+
Jm5ic3A7ZmZsdXNoKHN0ZG91dCk7PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyANCnNsZWVwKDEpOzxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsgDQpyZXR1cm4oMCk7PEJSPn08QlI+PC9TUEFOPjwvRk9OVD48L0RJVj4NCjxE
SVY+PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+PFNQQU4gY2xhc3M9NDkwMDU0ODE5LTIyMDIyMDA1
Pg0KPERJVj48Rk9OVCBmYWNlPUFyaWFsIHNpemU9Mj48U1BBTiBjbGFzcz00OTAwNTQ4MTktMjIw
MjIwMDU+PT09PT09PSANCnR3b3Byb2Nlc3MuYz09PT09PT09PT09PT09PC9TUEFOPjwvRk9OVD48
L0RJVj4NCjxESVY+PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+PFNQQU4gY2xhc3M9NDkwMDU0ODE5
LTIyMDIyMDA1PiNpbmNsdWRlIA0KJmx0O3B0aHJlYWQuaCZndDs8QlI+I2luY2x1ZGUgJmx0O3Vu
aXN0ZC5oJmd0OzxCUj4jaW5jbHVkZSANCiZsdDtzdGRpby5oJmd0OzxCUj4jaW5jbHVkZSAmbHQ7
c3lzL3R5cGVzLmgmZ3Q7PEJSPiNpbmNsdWRlIA0KJmx0O3N5cy93YWl0LmgmZ3Q7PEJSPiNpbmNs
dWRlICZsdDtzaWduYWwuaCZndDs8QlI+I2luY2x1ZGUgDQombHQ7c3RkbGliLmgmZ3Q7PC9TUEFO
PjwvRk9OVD48L0RJVj4NCjxESVY+Jm5ic3A7PC9ESVY+DQo8RElWPjxGT05UIGZhY2U9QXJpYWwg
c2l6ZT0yPjxTUEFOIGNsYXNzPTQ5MDA1NDgxOS0yMjAyMjAwNT5zaWdzZXRfdCANCnNpZ25hbF9t
YXNrOzxCUj5pbnQgY2hpbGRwaWQ7PC9TUEFOPjwvRk9OVD48L0RJVj4NCjxESVY+Jm5ic3A7PC9E
SVY+DQo8RElWPjxGT05UIGZhY2U9QXJpYWwgc2l6ZT0yPjxTUEFOIGNsYXNzPTQ5MDA1NDgxOS0y
MjAyMjAwNT52b2lkPEJSPmRvZm9yaygpIA0KezxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsgaW50IA0KcmVzdWx0OzxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsgaW50IA0Kc2lnOzxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsgY2hpbGRwaWQgPSANCmZvcmsoKTs8QlI+Jm5ic3A7Jm5ic3A7
IHN3aXRjaCAoY2hpbGRwaWQpIHs8QlI+Jm5ic3A7Jm5ic3A7IGNhc2UgDQowOjxCUj4mbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQo8QlI+Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJlc3VsdCA9IA0Kc2lnd2Fp
dCgmYW1wO3NpZ25hbF9tYXNrLCANCiZhbXA7c2lnKTs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGlmIChyZXN1bHQgDQohPSANCjApPEJS
PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCmZwcmludGYoc3Rkb3V0LCAic2ln
d2FpdDogJVxuIiwgDQpzdHJlcnJvcihyZXN1bHQpKTs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KZWxzZTxCUj4mbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsgDQpmcHJpbnRmKHN0ZG91dCwgInNpZ25hbCAlZFxuIiwgc2ln
KTs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KZmZsdXNoKHN0ZG91dCk7PEJSPiZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCl9leGl0KDApOzxCUj4mbmJzcDsmbmJzcDsg
Y2FzZSANCi0xOjxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQovLyBzb21l
IGVycm9yPEJSPiZuYnNwOyZuYnNwO19leGl0KDEpOzxCUj4mbmJzcDsmbmJzcDsgDQpkZWZhdWx0
OjxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgDQovLyBwYXJlbnQgDQpwcm9j
ZXNzPEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCmZwcmludGYoc3Rkb3V0
LCAiZm9yaywgaW4gcGFyZW50IA0KcHJvY2Vzc1xuIik7PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyANCmZmbHVzaChzdGRvdXQpOzxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsgDQpicmVhazs8QlI+Jm5ic3A7Jm5ic3A7IH08QlI+fTwvU1BBTj48L0ZPTlQ+
PC9ESVY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJVj48Rk9OVCBmYWNlPUFyaWFsIHNpemU9Mj48
U1BBTiANCmNsYXNzPTQ5MDA1NDgxOS0yMjAyMjAwNT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsgDQo8QlI+aW50PEJSPm1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2
KSB7PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCnB0aHJlYWRfdCBpZDs8QlI+
Jm5ic3A7cHRocmVhZF9hdHRyX3QgYXR0cjs8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7IA0KaW50IHJlc3VsdDs8L1NQQU4+PC9GT05UPjwvRElWPg0KPERJVj4mbmJzcDs8L0RJVj4N
CjxESVY+PEZPTlQgZmFjZT1BcmlhbCBzaXplPTI+PFNQQU4gDQpjbGFzcz00OTAwNTQ4MTktMjIw
MjIwMDU+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHNpZ2VtcHR5c2V0IA0KKCZhbXA7
c2lnbmFsX21hc2spOzxCUj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgc2lnYWRkc2V0
IA0KKCZhbXA7c2lnbmFsX21hc2ssIFNJR1RFUk0pOzwvU1BBTj48L0ZPTlQ+PC9ESVY+DQo8RElW
PiZuYnNwOzwvRElWPg0KPERJVj48Rk9OVCBmYWNlPUFyaWFsIHNpemU9Mj48U1BBTiANCmNsYXNz
PTQ5MDA1NDgxOS0yMjAyMjAwNT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmVzdWx0
ID0gDQpzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZhbXA7c2lnbmFsX21hc2ssIA0KTlVMTCk7PEJS
PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBpZiAocmVzdWx0ICE9IA0KMCk8QlI+Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KZnByaW50ZihzdGRvdXQsICJwdGhyZWFkX3NpZ21h
c2s6ICVcbiIsIA0Kc3RyZXJyb3IocmVzdWx0KSk7PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyANCmVsc2U8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KZnBy
aW50ZihzdGRvdXQsICJwdGhyZWFkX3NpZ21hc2s6IA0KT0tcbiIpOzxCUj4mbmJzcDtmZmx1c2go
c3Rkb3V0KTs8L1NQQU4+PC9GT05UPjwvRElWPg0KPERJVj4mbmJzcDs8L0RJVj4NCjxESVY+PEZP
TlQgZmFjZT1BcmlhbCBzaXplPTI+PFNQQU4gDQpjbGFzcz00OTAwNTQ4MTktMjIwMjIwMDU+Jm5i
c3A7ZG9mb3JrKCk7PC9TUEFOPjwvRk9OVD48L0RJVj4NCjxESVY+Jm5ic3A7PC9ESVY+DQo8RElW
PjxGT05UIGZhY2U9QXJpYWwgc2l6ZT0yPjxTUEFOIA0KY2xhc3M9NDkwMDU0ODE5LTIyMDIyMDA1
PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCnNsZWVwKDEpOzwvU1BBTj48L0ZPTlQ+
PC9ESVY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJVj48Rk9OVCBmYWNlPUFyaWFsIHNpemU9Mj48
U1BBTiANCmNsYXNzPTQ5MDA1NDgxOS0yMjAyMjAwNT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsgaWYgKGtpbGwoY2hpbGRwaWQsIA0KU0lHVEVSTSkgPT0gDQotMSk8QlI+Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IA0KcGVycm9yKCJraWxsIik7PEJSPiZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyANCmVsc2U8QlI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7IA0KZnByaW50ZihzdGRvdXQsICJraWxsOiANCk9LXG4iKTs8QlI+Jm5ic3A7ZmZsdXNo
KHN0ZG91dCk7PEJSPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyANCnJldHVybigwKTs8
QlI+fTxCUj48L1NQQU4+PC9GT05UPjwvRElWPjwvRElWPjwvU1BBTj48L0ZPTlQ+PC9CT0RZPjwv
SFRNTD4NCg==
------_=_NextPart_001_01C51918.B4EDF491--
More information about the freebsd-threads
mailing list