From owner-freebsd-threads@FreeBSD.ORG Sun May 6 14:21:32 2007 Return-Path: X-Original-To: freebsd-threads@FreeBSD.org Delivered-To: freebsd-threads@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6D4CF16A401; Sun, 6 May 2007 14:21:32 +0000 (UTC) (envelope-from eischen@vigrid.com) Received: from mail.ntplx.net (mail.ntplx.net [204.213.176.10]) by mx1.freebsd.org (Postfix) with ESMTP id 15BBE13C457; Sun, 6 May 2007 14:21:31 +0000 (UTC) (envelope-from eischen@vigrid.com) Received: from sea.ntplx.net (sea.ntplx.net [204.213.176.11]) by mail.ntplx.net (8.14.0/8.14.0/NETPLEX) with ESMTP id l46E7p7c000219; Sun, 6 May 2007 10:07:51 -0400 (EDT) X-Virus-Scanned: by AMaViS and Clam AntiVirus (mail.ntplx.net) X-Greylist: Message whitelisted by DRAC access database, not delayed by milter-greylist-3.0 (mail.ntplx.net [204.213.176.10]); Sun, 06 May 2007 10:07:51 -0400 (EDT) Date: Sun, 6 May 2007 10:07:51 -0400 (EDT) From: Daniel Eischen X-X-Sender: eischen@sea.ntplx.net To: freebsd-current@FreeBSD.org Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Mailman-Approved-At: Sun, 06 May 2007 14:30:35 +0000 Cc: Subject: HEADS UP: shared library bump, symbol versioning, libthr change X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: freebsd-current@FreeBSD.org List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 06 May 2007 14:21:32 -0000 Sometime this coming weekend (May 11-13), I'll be committing the following patch: http://people.freebsd.org/~deischen/symver/bump_symver.diffs.050207 What does this do? o All library versions that haven't already been bumped and that are not new to 7.0 will be bumped. o Symbol versioning will be enabled by default. This means that for those libraries which are symbol versioned (libc, libelf, libpthread, librt, libthr, libthr_db, and msun) we will have to support all public interfaces as our ABI from this point forward. Compatibility is now maintained in the library itself, not in a separate compat library and by bumping shared library versions. You can disable symbol versioning by setting NO_SYMVER. o The default threading library is changed from libpthread to libthr. libthr remains installed as libthr, libpthread is installed as libkse, and libpthread will link to libthr by default. Compiling with -pthread will continue to work as before. You can override the default library by setting DEFAULT_THREAD_LIBRARY=libpthread or libc_r before a buildworld/installworld. /lib/libthr.so.3 /usr/lib/libpthread.a -> libthr.a /usr/lib/libpthread.so -> libthr.so /usr/lib/libpthread_p.a -> libthr_p.a /usr/lib/libthr.a /usr/lib/libthr.so -> /lib/libthr.so.3 /usr/lib/libthr_p.a /usr/lib/libkse.a /usr/lib/libkse.so -> libkse.so.3 /usr/lib/libkse.so.3 /usr/lib/libkse_p.a How does this affect ports? Kris ran a package build with this patch, and there were a few problems, mostly because x11-toolkits/xview/patch-lib+libxview+textsw+txt_again.c patches xview to use __svfscanf() which is an internal libc function (it should probably use vfscanf). A few ports broke because they required xview. Some ports did not break, but they used some symbols exported from libc that are private and not part of the ABI. These ports are not clean with respect to our ABI and should be changed if possible. Some of my notes on symbol versioning are here: http://people.freebsd.org/~deischen/symver/library_versioning.txt and better technical references are Ulrich Drepper's notes or Sun's document: http://people.redhat.com/~drepper/symbol-versioning http://www.sun.com/software/solaris/programs/abi/documentation/solaris-abi.pdf -- DE From owner-freebsd-threads@FreeBSD.ORG Mon May 7 11:08:49 2007 Return-Path: X-Original-To: freebsd-threads@FreeBSD.org Delivered-To: freebsd-threads@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id EA0CC16A4CA for ; Mon, 7 May 2007 11:08:49 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id D4F9E13C448 for ; Mon, 7 May 2007 11:08:49 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (linimon@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id l47B8nhm078819 for ; Mon, 7 May 2007 11:08:49 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from linimon@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id l47B8mYJ078814 for freebsd-threads@FreeBSD.org; Mon, 7 May 2007 11:08:48 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 7 May 2007 11:08:48 GMT Message-Id: <200705071108.l47B8mYJ078814@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: linimon set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: freebsd-threads@FreeBSD.org Cc: Subject: Current problem reports assigned to you X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 07 May 2007 11:08:50 -0000 Current FreeBSD problem reports Critical problems S Tracker Resp. Description -------------------------------------------------------------------------------- s threa/76690 threads fork hang in child for -lc_r 1 problem total. Serious problems S Tracker Resp. Description -------------------------------------------------------------------------------- o kern/20016 threads pthreads: Cannot set scheduling timer/Cannot set virtu s threa/24472 threads libc_r does not honor SO_SNDTIMEO/SO_RCVTIMEO socket o s threa/24632 threads libc_r delicate deviation from libc in handling SIGCHL s bin/32295 threads pthread dont dequeue signals s threa/34536 threads accept() blocks other threads o kern/38549 threads the procces compiled whith pthread stopped in pthread_ s threa/39922 threads [threads] [patch] Threaded applications executed with s threa/48856 threads Setting SIGCHLD to SIG_IGN still leaves zombies under s threa/49087 threads Signals lost in programs linked with libc_r s kern/64313 threads FreeBSD (OpenBSD) pthread implicit set/unset O_NONBLOC o threa/70975 threads unexpected and unreliable behaviour when using SYSV se o threa/72429 threads threads blocked in stdio (fgets, etc) are not cancella o threa/72953 threads fork() unblocks blocked signals w/o PTHREAD_SCOPE_SYST o threa/75273 threads FBSD 5.3 libpthread (KSE) bug o threa/75374 threads pthread_kill() ignores SA_SIGINFO flag s threa/76694 threads fork cause hang in dup()/close() function in child (-l o threa/79683 threads svctcp_create() fails if multiple threads call at the o threa/80435 threads panic on high loads o threa/83914 threads [libc] popen() doesn't work in static threaded program s threa/84483 threads problems with devel/nspr and -lc_r on 4.x o threa/85160 threads [libthr] [patch] libobjc + libpthread/libthr crash pro f threa/90278 threads libthr, ULE and -current produces >100% WCPU with apac o kern/91266 threads [threads] Trying sleep, but thread marked as sleeping s threa/94467 threads send(), sendto() and sendmsg() are not correct in libc f threa/98256 threads gnome-system-monitor core dumps from pthread_testcance s threa/100815 threads FBSD 5.5 broke nanosleep in libc_r o threa/101323 threads fork(2) in threaded programs broken. o threa/103975 threads Implicit loading/unloading of libpthread.so may crash o threa/110636 threads gdb(1): using gdb with multi thread application with l 29 problems total. Non-critical problems S Tracker Resp. Description -------------------------------------------------------------------------------- s kern/19247 threads uthread_sigaction.c does not do anything wrt SA_NOCLDW s kern/22190 threads A threaded read(2) from a socketpair(2) fd can sometim s threa/30464 threads pthread mutex attributes -- pshared s threa/37676 threads libc_r: msgsnd(), msgrcv(), pread(), pwrite() need wra s threa/40671 threads pthread_cancel doesn't remove thread from condition qu s threa/69020 threads pthreads library leaks _gc_mutex o threa/79887 threads [patch] freopen() isn't thread-safe o threa/80992 threads abort() sometimes not caught by gdb depending on threa o threa/81534 threads [libc_r] [patch] libc_r close() will fail on any fd ty o threa/110306 threads apache 2.0 segmentation violation when calling gethost o threa/112297 threads [rtld] [patch] Memory leak in ld-elf.so with each thre 11 problems total. From owner-freebsd-threads@FreeBSD.ORG Fri May 11 11:28:13 2007 Return-Path: X-Original-To: freebsd-threads@freebsd.org Delivered-To: freebsd-threads@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 1339416A403 for ; Fri, 11 May 2007 11:28:13 +0000 (UTC) (envelope-from liu_peng@ec.com.cn) Received: from ec.com.cn (mofcom.gov.cn [211.88.2.44]) by mx1.freebsd.org (Postfix) with ESMTP id 1BC4013C44C for ; Fri, 11 May 2007 11:28:12 +0000 (UTC) (envelope-from liu_peng@ec.com.cn) Received: from localhost (localhost.localdomain [127.0.0.1]) by ec.com.cn (Postfix) with SMTP id A1CFB1BF7F for ; Fri, 11 May 2007 19:04:08 +0800 (CST) Received: from liupeng (unknown [211.88.25.64]) by ec.com.cn (Postfix) with ESMTP id 3D73E1BF82 for ; Fri, 11 May 2007 19:04:08 +0800 (CST) Message-ID: <000701c793bc$d897cbf0$401958d3@liupeng> From: "liupeng" To: Date: Fri, 11 May 2007 19:09:29 +0800 MIME-Version: 1.0 X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 6.00.2900.3028 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3028 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: question about using freebsd threads X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 May 2007 11:28:13 -0000 SGksDQogIEkndmUgYSBwcm9ibGVtIHdpdGggdXNpbmcgdGhyZWFkcy4NCiAgSSB3cml0ZSBhIHNp bXBsZSBwcm94eSBzZXJ2ZXIgb24gZnJlZWJzZCBsaWtlIHRoaXM6DQoNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojaW5jbHVkZSA8cHRocmVhZC5oPg0K I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNpbmNsdWRl IDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4N CiNpbmNsdWRlIDxhcnBhL2luZXQuaD4NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiNpbmNsdWRlIDxl cnJuby5oPg0KI2luY2x1ZGUgPHNpZ25hbC5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KDQppbnQg c2NMaXN0ZW49LTE7DQppbnQgaWdDb25uTnVtPTU7DQoNCiNkZWZpbmUgQlVGX0xFTl80SyA0MDk2 DQoNCmludCBTeXNfcmVjdihjaGFyKiBwQnVmLCBpbnQgaUJ1ZkxlbiwgaW50IHNjQ29uICkNCnsN Cg0KIGludCBpUmVzdWx0ID0gMDsNCg0KIGlSZXN1bHQgPSByZWN2KHNjQ29uLCBwQnVmLCBpQnVm TGVuLCAwKTsNCg0KIHJldHVybiBpUmVzdWx0Ow0KDQp9DQoNCmludCBTeXNfc2VuZChjaGFyKiBw QnVmLCBpbnQgaUJ1ZkxlbiwgaW50IHNjQ29uICkNCnsNCg0KIGludCBpUmVzdWx0PTA7DQoNCiAg Zm9yIChpbnQgaVdyaXRlID0gMDsgaVdyaXRlIDwgaUJ1ZkxlbjsgaVdyaXRlICs9IGlSZXN1bHQp DQogIHsNCiAgIGlSZXN1bHQgPSBzZW5kKHNjQ29uLCBwQnVmICsgaVdyaXRlLCBpQnVmTGVuIC0g aVdyaXRlLCAwKTsNCiAgIGlmIChpUmVzdWx0IDw9IDApDQogICAgcmV0dXJuIGlSZXN1bHQ7DQog IH0NCg0KDQogcmV0dXJuIGlSZXN1bHQ7DQoNCn0NCg0KDQppbnQgU3lzX0Nvbm5lY3QoIGNvbnN0 IGNoYXIqIHN6QWRkciwgdW5zaWduZWQgaW50IHVpUG9ydCkNCnsNCiBpbnQgc2NDb24gPSAtMTsN CiBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsNCiANCiBpbnQgblJ2ID0gMDsNCiANCiBpbnQgbmVy cj0wOw0KIGludCBuZGF0YT0xOw0KDQoNCiBzY0NvbiA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NU UkVBTSwgSVBQUk9UT19UQ1ApOw0KIA0KDQogaWYgKHNjQ29uID09IC0xKQ0KIHsNCiAgcmV0dXJu IHNjQ29uOw0KIH0NCg0KIGlmKHN6QWRkcikNCiB7ICANCiAgYWRkci5zaW5fYWRkci5zX2FkZHIg PSBpbmV0X2FkZHIoc3pBZGRyKTsNCiB9DQoNCg0KIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7 DQogYWRkci5zaW5fcG9ydCA9IGh0b25zKChzaG9ydCl1aVBvcnQpOw0KDQogaWYgKGNvbm5lY3Qo c2NDb24sIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcixzaXplb2YoYWRkcikpID09IC0xKQ0KIHsN CiAgY2xvc2Uoc2NDb24pOw0KICBzY0NvbiA9IC0xOw0KIH0NCg0KIHJldHVybiBzY0NvbjsNCg0K fQ0KDQp2b2lkICogaW50ZXJuYWxUaHJlYWRQcm9jKHZvaWQqIGxwUGFyYW0pDQp7DQogaW50IHNj Q29uOw0KIGludCBzY1NlcnZlcj0tMTsNCiBpbnQgaUNvdW50PTA7DQogY2hhciAqcEJ1ZmZlcj1O VUxMOw0KIGludCBpUmV0PTA7DQogZmRfc2V0IGZkUmVjdjsNCiBzdHJ1Y3QgdGltZXZhbCB0aW1l b3V0Ow0KIA0KIHNjQ29uPSooKGludCAqKWxwUGFyYW0pOw0KIGZyZWUobHBQYXJhbSk7DQogDQog cHJpbnRmKCJ0aHJlYWQgJWQgY3JlYXRlZFxuIixwdGhyZWFkX3NlbGYoKSk7DQogDQogcHRocmVh ZF9kZXRhY2gocHRocmVhZF9zZWxmKCkpOw0KIA0KIHNjU2VydmVyID0gU3lzX0Nvbm5lY3QoICIy MTEuODguNS4xMiIsIDgwKTsNCiBpZiggc2NTZXJ2ZXIgPT0gLTEgKQ0KIHsNCiAgZ290byBFbmQ7 DQogfQ0KIA0KIHBCdWZmZXIgICAgICAgICA9IG5ldyBjaGFyW0JVRl9MRU5fNEsrMTAyNF07DQog aWYocEJ1ZmZlciA9PSBOVUxMKSANCiB7DQogIHByaW50ZigiYWxsb2MgbWVtb3J5IGZhaWxlZFxu Iik7DQogIGdvdG8gRW5kOw0KIH0NCg0KIHRpbWVvdXQudHZfc2VjICA9IDMwMDsNCiB0aW1lb3V0 LnR2X3VzZWMgPSAwOw0KDQoNCg0KIGludCBtYXg7ICAgIA0KIG1heCA9IChzY0NvbiA+IHNjU2Vy dmVyKSA/IHNjQ29uIDogc2NTZXJ2ZXI7DQogIA0KIHdoaWxlKDEpDQogew0KICANCiAgRkRfWkVS TygmZmRSZWN2KTsNCiAgRkRfU0VUKHNjQ29uLCAmZmRSZWN2KTsNCiAgRkRfU0VUKHNjU2VydmVy LCAmZmRSZWN2KTsNCiAgDQogIGlSZXQ9c2VsZWN0KG1heCsxLCAmZmRSZWN2LCBOVUxMLCBOVUxM LCAmdGltZW91dCk7DQogIA0KICBpZiAoIGlSZXQgPiAwICkNCiAgew0KICAgaWYoRkRfSVNTRVQo c2NDb24sJmZkUmVjdikpDQogICB7DQogICAgDQogICAgbWVtc2V0KHBCdWZmZXIsMCxCVUZfTEVO XzRLKTsNCiAgICBpQ291bnQgPSBTeXNfcmVjdihwQnVmZmVyLCBCVUZfTEVOXzRLLCBzY0NvbiAp Ow0KICAgIGlmIChpQ291bnQ+MCkNCiAgICB7DQogICAgIGlDb3VudCA9IFN5c19zZW5kKCBwQnVm ZmVyLCBpQ291bnQsIHNjU2VydmVyICk7DQogICAgIGlmIChpQ291bnQ+MCkNCiAgICAgew0KICAg ICAgY29udGludWU7DQogICAgIH0NCiAgICAgZWxzZQ0KICAgICB7DQogICAgICBnb3RvIEVuZDsN CiAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICBnb3RvIEVuZDsNCiAgICB9DQog ICB9DQogICBlbHNlIGlmKEZEX0lTU0VUKHNjU2VydmVyLCZmZFJlY3YpKQ0KICAgew0KICAgIG1l bXNldChwQnVmZmVyLDAsQlVGX0xFTl80Syk7DQogICAgaUNvdW50ID0gU3lzX3JlY3YoIHBCdWZm ZXIsIEJVRl9MRU5fNEssIHNjU2VydmVyICk7DQogICAgaWYgKGlDb3VudD4wKQ0KICAgIHsNCiAN CiAgICAgaUNvdW50ID0gU3lzX3NlbmQocEJ1ZmZlciwgaUNvdW50LCBzY0NvbiApOw0KICAgICBp ZihpQ291bnQgPD0gMCkNCiAgICAgew0KIA0KICAgICAgIGdvdG8gRW5kOw0KICAgICB9DQogICAg IA0KICAgIA0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICBnb3RvIEVuZDsNCiAgICB9DQog ICB9DQogICBlbHNlDQogICB7DQogICAgZ290byBFbmQ7DQogICB9DQogIH0NCiAgZWxzZQ0KICB7 DQogICAvL3ByaW50Zigic2VsZWN0IDwgMCAsZXJyPSVkXG4iLGVycm5vKTsNCiAgIA0KICB9DQog fQ0KICANCg0KDQpFbmQ6IA0KIGlmIChzY1NlcnZlciE9LTEpDQogIGNsb3NlKHNjU2VydmVyKTsN CiBpZiAoc2NDb24hPS0xKQ0KICBjbG9zZShzY0Nvbik7DQogaWYocEJ1ZmZlcikNCiAgZGVsZXRl W10gcEJ1ZmZlcjsNCiAgDQogcHJpbnRmKCJ0aHJlYWQgJWQgdGVybWluYXRlZFxuIixwdGhyZWFk X3NlbGYoKSk7DQogDQogcmV0dXJuIE5VTEw7DQoNCn0NCg0KaW50IFN5c19DcmVhdGVMaXN0ZW5Q b3J0KCB1bnNpZ25lZCBpbnQgdWlQb3J0LCBib29sIGJUQ1AsIGNoYXIgKnNJUCApDQp7DQogc3Ry dWN0IHNvY2thZGRyX2luIGFkZHI7DQogaW50IHNjTGlzdGVuID0gLTE7DQoNCiBpZiggYlRDUCAp DQogIHNjTGlzdGVuID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBOVUxMKTsNCiBlbHNl DQogIHNjTGlzdGVuID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIE5VTEwpOw0KDQoNCiBp Ziggc0lQICE9IE5VTEwgKQ0KICBhZGRyLnNpbl9hZGRyLnNfYWRkciA9ICBpbmV0X2FkZHIoKGNv bnN0IGNoYXIqKXNJUCk7DQogZWxzZQ0KICBhZGRyLnNpbl9hZGRyLnNfYWRkciA9ICBodG9ubChJ TkFERFJfQU5ZKTsNCg0KIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogYWRkci5zaW5fcG9y dCA9IGh0b25zKChzaG9ydCl1aVBvcnQpOw0KDQogaWYgKGJpbmQoc2NMaXN0ZW4sIChzdHJ1Y3Qg c29ja2FkZHIqKSZhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkpDQogew0KICBjbG9zZShz Y0xpc3Rlbik7DQogIHNjTGlzdGVuID0gLTE7DQogIHJldHVybiBzY0xpc3RlbjsNCiB9DQoNCiBp ZiggYlRDUCApDQogeyAgDQogIGlmIChsaXN0ZW4oc2NMaXN0ZW4sIGlnQ29ubk51bSkpDQogIHsN CiAgIGNsb3NlKHNjTGlzdGVuKTsNCiAgIHNjTGlzdGVuID0gLTE7DQogICByZXR1cm4gc2NMaXN0 ZW47DQogIH0NCiB9DQoNCiByZXR1cm4gc2NMaXN0ZW47DQp9DQoNCg0Kdm9pZCAqQ3JlYXRlVGhy ZWFkRm9yUmVxdWVzdCh2b2lkICpwUEFSQU0pDQp7DQogcHRocmVhZF90IG15dGhyZWFkOw0KICAN CiBpbnQgKnNjQ2xpZW50PU5VTEw7DQogDQogDQogd2hpbGUoMSkNCiB7DQogICBzY0NsaWVudD0o aW50ICopbWFsbG9jKHNpemVvZihpbnQpKTsNCiAgIA0KICAgKnNjQ2xpZW50PWFjY2VwdChzY0xp c3RlbixOVUxMLDApOw0KICAgDQogICBpZiAoKnNjQ2xpZW50PDApDQogICB7DQogICAgcHJpbnRm KCJhY2NlcHQgZmFpbGVkXG4iKTsNCiAgICBjb250aW51ZTsNCiAgIH0NCg0KICAgaWYgKCFwdGhy ZWFkX2NyZWF0ZSgmbXl0aHJlYWQsTlVMTCxpbnRlcm5hbFRocmVhZFByb2MsKHZvaWQgKilzY0Ns aWVudCkpDQogICB7DQogICB9DQogICBlbHNlDQogICB7DQogICAgIHByaW50ZigiY3JlYXRlIHRo cmVhZCBpbnRlcm5hbFRocmVhZFByb2MgZmFpbGVkXG4iKTsgDQogICB9DQogIA0KIH0NCiANCn0N Cg0KDQppbnQgbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pDQp7DQogcHRocmVhZF90IHVpVGhy ZWFkSUQ7DQogaW50IG5EYXRhPTE7DQogbGluZ2VyIGxfdG12Ow0KICAgICAgDQogDQogc2lnbmFs KFNJR1BJUEUsICAgU0lHX0lHTik7ICAgDQogDQogc2NMaXN0ZW49U3lzX0NyZWF0ZUxpc3RlblBv cnQoNDQzLDEsIjIxMS44OC44LjE4MiIpOw0KIGlmIChzY0xpc3Rlbj09LTEpDQogew0KICBwcmlu dGYoImVycm9yIGluIGNyZWF0ZSBsaXN0ZW4gc29ja2V0XG4iKTsNCiAgZ290byBjbGVhbnVwOw0K IH0NCiANCiBpZihwdGhyZWFkX2NyZWF0ZSgmdWlUaHJlYWRJRCxOVUxMLENyZWF0ZVRocmVhZEZv clJlcXVlc3QsTlVMTCkpDQogew0KICBwcmludGYoImNyZWF0ZSB0aHJlYWQgQ3JlYXRlVGhyZWFk Rm9yUmVxdWVzdCBmYWlsISEhIVxuIik7DQogIHJldHVybiBmYWxzZTsNCiB9DQogDQogDQogaWYg KHB0aHJlYWRfam9pbih1aVRocmVhZElELE5VTEwpKQ0KICB7DQogICBwcmludGYoInB0aHJlYWQg am9pbiBmYWlsZWRcbiIpOw0KICAgcmV0dXJuIGZhbHNlOw0KICB9DQogDQogDQoNCmNsZWFudXA6 DQogcmV0dXJuIDA7IA0KIA0KfQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCg0KRnJlZWJzZCBwbGF0Zm9ybToNCkZyZWVCU0QgSmFpbC0xNjEgNi4yLVJF TEVBU0UgRnJlZUJTRCA2LjItUkVMRUFTRSAjMDogRnJpIEphbiAxMiAxMTowNTozMCBVVEMgMjAw NyAgICAgcm9vdEBkZXNzbGVyLmNzZS5idWZmYWxvLmVkdTovdXNyL29iai91c3Ivc3JjL3N5cy9T TVAgIGkzODYNCg0KQ29tcGlsZXIgZ2NjOg0KZ2NjIChHQ0MpIDMuNC42IFtGcmVlQlNEXSAyMDA2 MDMwNQ0KQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0K VGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRp b25zLiAgVGhlcmUgaXMgTk8NCndhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLg0KDQpDb21waWxlIG9wdGlvbjoN CmcrKyAgLWcgIC1vIHRlc3QgdGVzdC5jcHAgLWxwdGhyZWFkDQoNCkkgdXNlIGxvYWRydW5uZXIg dG8gdGVzdCBteSBwcm94eSBzZXJ2ZXIsaXQgY3Jhc2hlZCBhdCBhYm91dCA1MDAgdnVzZXIuDQoN CnRoZSBjb3JlZHVtcCBpbmZvcm1hdGlvbjoNCihnZGIpIHdoZXJlDQojMCAgMHgyODA5ODUzNyBp biBwdGhyZWFkX3Rlc3RjYW5jZWwgKCkgZnJvbSAvbGliL2xpYnB0aHJlYWQuc28uMg0KIzEgIDB4 MjgwOTBlYzggaW4gcHRocmVhZF9tdXRleGF0dHJfaW5pdCAoKSBmcm9tIC9saWIvbGlicHRocmVh ZC5zby4yDQojMiAgMHgyODA3YTQ1MCBpbiA/PyAoKQ0KDQpJIHRyeSB0byBjaGFuZ2UgbXkgY29t cGlsZSBvcHRpb24gdXNlIC1wdGhyZWFkIG9yIC1sY19yLGJ1dCBpdCBzdGlsbCBjcmFzaGVkLHdo eT8gRG9lcyBzb21lb25lIGNhbiBnaXZlIHN1Z2dlc3Rpb25zPw0KDQoNCiAg From owner-freebsd-threads@FreeBSD.ORG Fri May 11 11:52:55 2007 Return-Path: X-Original-To: freebsd-threads@freebsd.org Delivered-To: freebsd-threads@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id EA6FD16A400 for ; Fri, 11 May 2007 11:52:54 +0000 (UTC) (envelope-from lpbpu@126.com) Received: from m15-61.126.com (m15-61.126.com [220.181.15.61]) by mx1.freebsd.org (Postfix) with SMTP id E013D13C448 for ; Fri, 11 May 2007 11:52:53 +0000 (UTC) (envelope-from lpbpu@126.com) Received: from 192.168.208.33 ( 192.168.208.33 [192.168.208.33] ) by webmail-app61 (Coremail) ; Fri, 11 May 2007 19:18:05 +0800 (CST) MIME-Version: 1.0 Message-ID: <464450ED.00003D.11610@bj126app61.126.com> Date: Fri, 11 May 2007 19:18:05 +0800 (CST) From: lpbpu@126.com To: "freebsd-threads@freebsd.org" X-Priority: 3 X-Originating-IP: [192.168.208.33] X-Mailer: 126com Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: 7bit X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: question about using freebsd threads X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 May 2007 11:52:55 -0000 Hi, I've a problem with using threads. I write a simple proxy server on freebsd like this: ======================================================================================================== #include #include #include #include #include #include #include #include #include #include #include int scListen=-1; int igConnNum=5; #define BUF_LEN_4K 4096 int Sys_recv(char* pBuf, int iBufLen, int scCon ) { int iResult = 0; iResult = recv(scCon, pBuf, iBufLen, 0); return iResult; } int Sys_send(char* pBuf, int iBufLen, int scCon ) { int iResult=0; for (int iWrite = 0; iWrite < iBufLen; iWrite += iResult) { iResult = send(scCon, pBuf + iWrite, iBufLen - iWrite, 0); if (iResult <= 0) return iResult; } return iResult; } int Sys_Connect( const char* szAddr, unsigned int uiPort) { int scCon = -1; struct sockaddr_in addr; int nRv = 0; int nerr=0; int ndata=1; scCon = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (scCon == -1) { return scCon; } if(szAddr) { addr.sin_addr.s_addr = inet_addr(szAddr); } addr.sin_family = AF_INET; addr.sin_port = htons((short)uiPort); if (connect(scCon, (struct sockaddr *)&addr,sizeof(addr)) == -1) { close(scCon); scCon = -1; } return scCon; } void * internalThreadProc(void* lpParam) { int scCon; int scServer=-1; int iCount=0; char *pBuffer=NULL; int iRet=0; fd_set fdRecv; struct timeval timeout; scCon=*((int *)lpParam); free(lpParam); printf("thread %d created\n",pthread_self()); pthread_detach(pthread_self()); scServer = Sys_Connect( "211.88.5.12", 80); if( scServer == -1 ) { goto End; } pBuffer = new char[BUF_LEN_4K+1024]; if(pBuffer == NULL) { printf("alloc memory failed\n"); goto End; } timeout.tv_sec = 300; timeout.tv_usec = 0; int max; max = (scCon > scServer) ? scCon : scServer; while(1) { FD_ZERO(&fdRecv); FD_SET(scCon, &fdRecv); FD_SET(scServer, &fdRecv); iRet=select(max+1, &fdRecv, NULL, NULL, &timeout); if ( iRet > 0 ) { if(FD_ISSET(scCon,&fdRecv)) { memset(pBuffer,0,BUF_LEN_4K); iCount = Sys_recv(pBuffer, BUF_LEN_4K, scCon ); if (iCount>0) { iCount = Sys_send( pBuffer, iCount, scServer ); if (iCount>0) { continue; } else { goto End; } } else { goto End; } } else if(FD_ISSET(scServer,&fdRecv)) { memset(pBuffer,0,BUF_LEN_4K); iCount = Sys_recv( pBuffer, BUF_LEN_4K, scServer ); if (iCount>0) { iCount = Sys_send(pBuffer, iCount, scCon ); if(iCount <= 0) { goto End; } } else { goto End; } } else { goto End; } } else { //printf("select < 0 ,err=%d\n",errno); } } End: if (scServer!=-1) close(scServer); if (scCon!=-1) close(scCon); if(pBuffer) delete[] pBuffer; printf("thread %d terminated\n",pthread_self()); return NULL; } int Sys_CreateListenPort( unsigned int uiPort, bool bTCP, char *sIP ) { struct sockaddr_in addr; int scListen = -1; if( bTCP ) scListen = socket(AF_INET, SOCK_STREAM, NULL); else scListen = socket(AF_INET, SOCK_DGRAM, NULL); if( sIP != NULL ) addr.sin_addr.s_addr = inet_addr((const char*)sIP); else addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_family = AF_INET; addr.sin_port = htons((short)uiPort); if (bind(scListen, (struct sockaddr*)&addr, sizeof(struct sockaddr))) { close(scListen); scListen = -1; return scListen; } if( bTCP ) { if (listen(scListen, igConnNum)) { close(scListen); scListen = -1; return scListen; } } return scListen; } void *CreateThreadForRequest(void *pPARAM) { pthread_t mythread; int *scClient=NULL; while(1) { scClient=(int *)malloc(sizeof(int)); *scClient=accept(scListen,NULL,0); if (*scClient<0) { printf("accept failed\n"); continue; } if (!pthread_create(&mythread,NULL,internalThreadProc,(void *)scClient)) { } else { printf("create thread internalThreadProc failed\n"); } } } int main(int argc,char *argv[]) { pthread_t uiThreadID; int nData=1; linger l_tmv; signal(SIGPIPE, SIG_IGN); scListen=Sys_CreateListenPort(443,1,"211.88.8.182"); if (scListen==-1) { printf("error in create listen socket\n"); goto cleanup; } if(pthread_create(&uiThreadID,NULL,CreateThreadForRequest,NULL)) { printf("create thread CreateThreadForRequest fail!!!!\n"); return false; } if (pthread_join(uiThreadID,NULL)) { printf("pthread join failed\n"); return false; } cleanup: return 0; } ======================================================================================================== Freebsd platform: FreeBSD Jail-161 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Fri Jan 12 11:05:30 UTC 2007 root@dessler.cse.buffalo.edu:/usr/obj/usr/src/sys/SMP i386 Compiler gcc: gcc (GCC) 3.4.6 [FreeBSD] 20060305 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compile option: g++ -g -o test test.cpp -lpthread I use loadrunner to test my proxy server,it crashed at about 500 vuser. the coredump information: (gdb) where #0 0x28098537 in pthread_testcancel () from /lib/libpthread.so.2 #1 0x28090ec8 in pthread_mutexattr_init () from /lib/libpthread.so.2 #2 0x2807a450 in ?? () I try to change my compile option use -pthread or -lc_r,but it still crashed,why? Does someone can give suggestions?