Date: Tue, 22 Feb 2005 20:00:40 GMT From: Dong Xuezhang-A19583 <xdong@motorola.com> To: freebsd-threads@FreeBSD.org Subject: Re: threads/72953: fork() unblocks blocked signals w/o PTHREAD_SC OPE_SYSTEM Message-ID: <200502222000.j1MK0e46033113@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR threads/72953; it has been noted by GNATS. From: Dong Xuezhang-A19583 <xdong@motorola.com> To: freebsd-gnats-submit@FreeBSD.org, marka@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--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200502222000.j1MK0e46033113>