From owner-freebsd-arch@FreeBSD.ORG Tue Feb 20 17:08:45 2007 Return-Path: X-Original-To: freebsd-arch@freebsd.org Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 5CA2516B474 for ; Tue, 20 Feb 2007 17:08:45 +0000 (UTC) (envelope-from dbrewer@pixelfish.com) Received: from mail01.vmatrixmail.com (mail01.vmatrixmail.com [216.219.244.230]) by mx1.freebsd.org (Postfix) with ESMTP id 1C47E13C46B for ; Tue, 20 Feb 2007 17:08:45 +0000 (UTC) (envelope-from dbrewer@pixelfish.com) Received: (vmatrix@mail01.vmatrixmail.com) by vmatrixmail.com id S6072853AbXBTQo4 for ; Tue, 20 Feb 2007 08:44:56 -0800 To: freebsd-arch@freebsd.org MIME-Version: 1.0 X-Mailer: Rich Media Mail V4. Vmatrix, (C) 2003 From: "David Brewer" Sender: "David Brewer" Message-Id: Date: Tue, 20 Feb 2007 08:44:56 -0800 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: Your Recent Trade Show Results X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: dbrewer@pixelfish.com List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Feb 2007 17:08:45 -0000 Greetings!

Are you happy with your results from Social Linux Expo 2007? Did you have what it takes to make the difference between creating excitement and blending in with the competition, between lots of hot leads and a few hard sells ... between success and failure?

Did you have video?

Why video? Video vividly demonstrates the features and benefits of your products. Video captures the praises of your most enthusiastic customers. Video instills interest, reaction and trust. Video sells.

In just 45 days, PixelFish creates marketing videos that become an integral part of your marketing and sales efforts when it streams from your Web site, launches from multimedia email newsletters, plays from CD video brochures and loops from a DVD at your tradeshow booth.

We are PixelFish. We deliver “The Evolution of Video”. And we guarantee results. Click on the videos to the right to see samples of our work.

Contact us today for a free evaluation of your video marketing needs.

David Brewer
PixelFish, Inc.
800.503.3020 x102
dbrewer@pixelfish.com
http://www.pixelfish.com
RedMan Video
Pentax Video
JEM Video
------------------------------------------------ Unsubscribe to safely remove yourself from this email list, please send email to info@pixelfish.com. Powered by Pixelfish http://www.pixelfish.com From owner-freebsd-arch@FreeBSD.ORG Thu Feb 22 17:51:28 2007 Return-Path: X-Original-To: freebsd-arch@freebsd.org Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id AE55A16A402; Thu, 22 Feb 2007 17:51:28 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from tarsier.geekcn.org (tarsier.geekcn.org [210.51.165.229]) by mx1.freebsd.org (Postfix) with ESMTP id 44A3313C4B4; Thu, 22 Feb 2007 17:51:28 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from localhost (tarsier.geekcn.org [210.51.165.229]) by tarsier.geekcn.org (Postfix) with ESMTP id 2351BEB5B06; Fri, 23 Feb 2007 01:51:27 +0800 (CST) X-Virus-Scanned: amavisd-new at geekcn.org Received: from tarsier.geekcn.org ([210.51.165.229]) by localhost (mail.geekcn.org [210.51.165.229]) (amavisd-new, port 10024) with ESMTP id el-AdY0eh0-f; Fri, 23 Feb 2007 01:51:19 +0800 (CST) Received: from [192.168.1.32] (unknown [61.51.106.205]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by tarsier.geekcn.org (Postfix) with ESMTP id 8A416EB5B01; Fri, 23 Feb 2007 01:51:19 +0800 (CST) DomainKey-Signature: a=rsa-sha1; s=default; d=delphij.net; c=nofws; q=dns; h=message-id:date:from:organization:user-agent:mime-version:to:cc: subject:references:in-reply-to:x-enigmail-version:content-type; b=WoYtvKymKMADvSo5wrkq6uOgT/VFJe/Kj6gRt+XeGlrE0aYawf7B0VbxtJevsq0qR ALnKvrhkfDgj8WuYaYQbg== Message-ID: <45DDD816.80303@delphij.net> Date: Fri, 23 Feb 2007 01:51:18 +0800 From: LI Xin Organization: The FreeBSD Project User-Agent: Thunderbird 1.5.0.9 (Macintosh/20061207) MIME-Version: 1.0 To: John Baldwin References: <45CC0EB9.7030400@delphij.net> <200702090837.04495.jhb@freebsd.org> In-Reply-To: <200702090837.04495.jhb@freebsd.org> X-Enigmail-Version: 0.94.1.0 Content-Type: multipart/signed; micalg=pgp-ripemd160; protocol="application/pgp-signature"; boundary="------------enig7AEAF4ECD6333CE874CBC2A2" Cc: freebsd-arch@freebsd.org Subject: Re: Patch for review: resolve a race condition in [sg]etpriority() X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Feb 2007 17:51:28 -0000 This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig7AEAF4ECD6333CE874CBC2A2 Content-Type: multipart/mixed; boundary="------------010706080103010700040902" This is a multi-part message in MIME format. --------------010706080103010700040902 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Hi, John, John Baldwin wrote: > My only reason for favoring the wakeup for complete initialization is t= hat > while this patch may solve the getprio/setprio race, it doesn't solve a= ll > PRS_NEW-related races, which the sleep/wakeup proposal did. Today I have some time and tried your approach for a second time. It looks like that we can not simply sleep with allproc_lock held. The attached patchset implements the proof-of-concept idea, please let me know if you think this one is better. Cheers, --=20 Xin LI http://www.delphij.net/ FreeBSD - The Power to Serve! --------------010706080103010700040902 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="patch-priority-race.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline; filename="patch-priority-race.diff" Index: kern_exit.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /home/ncvs/src/sys/kern/kern_exit.c,v retrieving revision 1.294 diff -u -p -u -p -r1.294 kern_exit.c --- kern_exit.c 25 Oct 2006 06:18:04 -0000 1.294 +++ kern_exit.c 22 Feb 2007 16:19:17 -0000 @@ -526,6 +526,7 @@ retry: wakeup(p->p_pptr); mtx_lock_spin(&sched_lock); p->p_state =3D PRS_ZOMBIE; + wakeup(&p->p_state); PROC_UNLOCK(p->p_pptr); =20 sched_exit(p->p_pptr, td); Index: kern_fork.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /home/ncvs/src/sys/kern/kern_fork.c,v retrieving revision 1.266 diff -u -p -u -p -r1.266 kern_fork.c --- kern_fork.c 23 Jan 2007 08:46:50 -0000 1.266 +++ kern_fork.c 22 Feb 2007 14:58:41 -0000 @@ -695,8 +695,11 @@ again: * Set the child start time and mark the process as being complete. */ microuptime(&p2->p_stats->p_start); + PROC_LOCK(p2); mtx_lock_spin(&sched_lock); p2->p_state =3D PRS_NORMAL; + wakeup(&p2->p_state); + PROC_UNLOCK(p2); =20 /* * If RFSTOPPED not requested, make child runnable and add to Index: kern_resource.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /home/ncvs/src/sys/kern/kern_resource.c,v retrieving revision 1.166 diff -u -p -u -p -r1.166 kern_resource.c --- kern_resource.c 19 Feb 2007 13:22:36 -0000 1.166 +++ kern_resource.c 22 Feb 2007 17:44:04 -0000 @@ -144,6 +144,10 @@ getpriority(td, uap) sx_slock(&allproc_lock); FOREACH_PROC_IN_SYSTEM(p) { PROC_LOCK(p); + if (p->p_state =3D=3D PRS_NEW) { + PROC_UNLOCK(p); + continue; + } if (!p_cansee(td, p) && p->p_ucred->cr_uid =3D=3D uap->who) { if (p->p_nice < low) @@ -228,9 +232,18 @@ setpriority(td, uap) case PRIO_USER: if (uap->who =3D=3D 0) uap->who =3D td->td_ucred->cr_uid; +again: sx_slock(&allproc_lock); FOREACH_PROC_IN_SYSTEM(p) { PROC_LOCK(p); + if (p->p_state =3D=3D PRS_NEW) { + sx_sunlock(&allproc_lock); + msleep(&p->p_state, &p->p_mtx, + 0, "setpriority", 0); + PROC_UNLOCK(p); + goto again; + } + MPASS(p->p_state =3D=3D PRS_NORMAL); if (p->p_ucred->cr_uid =3D=3D uap->who && !p_cansee(td, p)) { error =3D donice(td, p, uap->prio); --------------010706080103010700040902-- --------------enig7AEAF4ECD6333CE874CBC2A2 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFF3dgWOfuToMruuMARA/mkAJwJ818KFaTzI9k0DLwlyH/PYhqlugCfYRLJ Z35n0p5z90qABJMY5pTlFGQ= =q29b -----END PGP SIGNATURE----- --------------enig7AEAF4ECD6333CE874CBC2A2-- From owner-freebsd-arch@FreeBSD.ORG Thu Feb 22 21:39:09 2007 Return-Path: X-Original-To: freebsd-arch@freebsd.org Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8F74D16A403 for ; Thu, 22 Feb 2007 21:39:09 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from server.baldwin.cx (66-23-211-162.clients.speedfactory.net [66.23.211.162]) by mx1.freebsd.org (Postfix) with ESMTP id 63AC413C428 for ; Thu, 22 Feb 2007 21:39:07 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from localhost.corp.yahoo.com (john@localhost [127.0.0.1]) (authenticated bits=0) by server.baldwin.cx (8.13.8/8.13.8) with ESMTP id l1MLcjZL005840; Thu, 22 Feb 2007 16:38:48 -0500 (EST) (envelope-from jhb@freebsd.org) From: John Baldwin To: LI Xin Date: Thu, 22 Feb 2007 16:39:12 -0500 User-Agent: KMail/1.9.1 References: <45CC0EB9.7030400@delphij.net> <200702090837.04495.jhb@freebsd.org> <45DDD816.80303@delphij.net> In-Reply-To: <45DDD816.80303@delphij.net> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200702221639.12751.jhb@freebsd.org> X-Greylist: Sender succeeded SMTP AUTH authentication, not delayed by milter-greylist-2.0.2 (server.baldwin.cx [127.0.0.1]); Thu, 22 Feb 2007 16:38:49 -0500 (EST) X-Virus-Scanned: ClamAV 0.88.3/2630/Thu Feb 22 14:12:40 2007 on server.baldwin.cx X-Virus-Status: Clean X-Spam-Status: No, score=-4.4 required=4.2 tests=ALL_TRUSTED,AWL,BAYES_00 autolearn=ham version=3.1.3 X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on server.baldwin.cx Cc: freebsd-arch@freebsd.org Subject: Re: Patch for review: resolve a race condition in [sg]etpriority() X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Feb 2007 21:39:09 -0000 On Thursday 22 February 2007 12:51, LI Xin wrote: > Hi, John, > > John Baldwin wrote: > > My only reason for favoring the wakeup for complete initialization is that > > while this patch may solve the getprio/setprio race, it doesn't solve all > > PRS_NEW-related races, which the sleep/wakeup proposal did. > > Today I have some time and tried your approach for a second time. It > looks like that we can not simply sleep with allproc_lock held. The > attached patchset implements the proof-of-concept idea, please let me > know if you think this one is better. Ok. It would actually be really nice if we could not put the process onto the allproc list until it was really fully created. Is the only reason we put it on the list to prevent duplicate pid allocation? -- John Baldwin From owner-freebsd-arch@FreeBSD.ORG Thu Feb 22 22:04:13 2007 Return-Path: X-Original-To: freebsd-arch@freebsd.org Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D12F716A402; Thu, 22 Feb 2007 22:04:13 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from tarsier.geekcn.org (tarsier.geekcn.org [210.51.165.229]) by mx1.freebsd.org (Postfix) with ESMTP id 8106C13C4AC; Thu, 22 Feb 2007 22:04:13 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from localhost (tarsier.geekcn.org [210.51.165.229]) by tarsier.geekcn.org (Postfix) with ESMTP id 9D301EB5BFB; Fri, 23 Feb 2007 06:04:12 +0800 (CST) X-Virus-Scanned: amavisd-new at geekcn.org Received: from tarsier.geekcn.org ([210.51.165.229]) by localhost (mail.geekcn.org [210.51.165.229]) (amavisd-new, port 10024) with ESMTP id RNZCSEh57o8o; Fri, 23 Feb 2007 06:04:03 +0800 (CST) Received: from [192.168.1.32] (unknown [61.51.106.205]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by tarsier.geekcn.org (Postfix) with ESMTP id 0081CEB5A13; Fri, 23 Feb 2007 06:04:02 +0800 (CST) DomainKey-Signature: a=rsa-sha1; s=default; d=delphij.net; c=nofws; q=dns; h=message-id:date:from:organization:user-agent:mime-version:to:cc: subject:references:in-reply-to:x-enigmail-version:content-type:content-transfer-encoding; b=MR5No777ZMy0tE2N8RH6VoxqEHzCzS0GZU15FD8rCB/G3pcEokzKw3efWkAzCXGb0 Ov/m1fmD90wzIdOIQf55A== Message-ID: <45DE1351.6060901@delphij.net> Date: Fri, 23 Feb 2007 06:04:01 +0800 From: LI Xin Organization: The FreeBSD Project User-Agent: Thunderbird 1.5.0.9 (Macintosh/20061207) MIME-Version: 1.0 To: John Baldwin References: <45CC0EB9.7030400@delphij.net> <200702090837.04495.jhb@freebsd.org> <45DDD816.80303@delphij.net> <200702221639.12751.jhb@freebsd.org> In-Reply-To: <200702221639.12751.jhb@freebsd.org> X-Enigmail-Version: 0.94.1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Cc: freebsd-arch@freebsd.org Subject: Re: Patch for review: resolve a race condition in [sg]etpriority() X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Feb 2007 22:04:13 -0000 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 John Baldwin wrote: > On Thursday 22 February 2007 12:51, LI Xin wrote: >> Hi, John, >> >> John Baldwin wrote: >>> My only reason for favoring the wakeup for complete initialization is that >>> while this patch may solve the getprio/setprio race, it doesn't solve all >>> PRS_NEW-related races, which the sleep/wakeup proposal did. >> Today I have some time and tried your approach for a second time. It >> looks like that we can not simply sleep with allproc_lock held. The >> attached patchset implements the proof-of-concept idea, please let me >> know if you think this one is better. > > Ok. It would actually be really nice if we could not put the process onto > the allproc list until it was really fully created. Is the only reason we put > it on the list to prevent duplicate pid allocation? I tend to disagree with that. Here is a scenario that makes this incorrect for setpriority, somewhat like what I have discussed with Robert earlier: A B (start forking) (copy p2 from p1) (setpriority in PRIO_USER case) <--user identical, but invisible to B (insert p2 into allproc) We end up with p2's priority unset, while p1's set. I think this is not what we want. If this is acceptable, then the easiest solution would be just skip PRS_NEW processes :-) In order to make setpriority() correct, it seems that we should have B either set p2's priority (initialized to a state where B can see it and operate without problem), or have a not-copied p2 if B can not see it, or at least block when the copy is in progress. Cheers, - -- Xin LI http://www.delphij.net/ FreeBSD - The Power to Serve! -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFF3hNROfuToMruuMARCly/AJ9a5I8JPTUsIJBi57nkNbllSVUXGgCeIqV0 YKm7guWpFkiFe7Bxvs/Xvck= =9NKM -----END PGP SIGNATURE----- From owner-freebsd-arch@FreeBSD.ORG Thu Feb 22 22:05:35 2007 Return-Path: X-Original-To: freebsd-arch@freebsd.org Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 10BFF16A400; Thu, 22 Feb 2007 22:05:35 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from tarsier.geekcn.org (tarsier.geekcn.org [210.51.165.229]) by mx1.freebsd.org (Postfix) with ESMTP id B68B513C4AC; Thu, 22 Feb 2007 22:05:34 +0000 (UTC) (envelope-from delphij@delphij.net) Received: from localhost (tarsier.geekcn.org [210.51.165.229]) by tarsier.geekcn.org (Postfix) with ESMTP id C70E4EB5C15; Fri, 23 Feb 2007 06:05:33 +0800 (CST) X-Virus-Scanned: amavisd-new at geekcn.org Received: from tarsier.geekcn.org ([210.51.165.229]) by localhost (mail.geekcn.org [210.51.165.229]) (amavisd-new, port 10024) with ESMTP id FbB7Eb3SZO3s; Fri, 23 Feb 2007 06:05:27 +0800 (CST) Received: from [192.168.1.32] (unknown [61.51.106.205]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by tarsier.geekcn.org (Postfix) with ESMTP id 0C39EEB5C0F; Fri, 23 Feb 2007 06:05:27 +0800 (CST) DomainKey-Signature: a=rsa-sha1; s=default; d=delphij.net; c=nofws; q=dns; h=message-id:date:from:organization:user-agent:mime-version:to:cc: subject:references:in-reply-to:x-enigmail-version:content-type:content-transfer-encoding; b=HVluQfmQQ1SCr3AhjvG09t98QDtd6AhnW1hTlf86wLhDIUk5s1q2d8VT+pFJzK/LU ZG3nn1ZNgWLAbC9r4b+3g== Message-ID: <45DE13A6.4010509@delphij.net> Date: Fri, 23 Feb 2007 06:05:26 +0800 From: LI Xin Organization: The FreeBSD Project User-Agent: Thunderbird 1.5.0.9 (Macintosh/20061207) MIME-Version: 1.0 To: John Baldwin References: <45CC0EB9.7030400@delphij.net> <200702090837.04495.jhb@freebsd.org> <45DDD816.80303@delphij.net> <200702221639.12751.jhb@freebsd.org> In-Reply-To: <200702221639.12751.jhb@freebsd.org> X-Enigmail-Version: 0.94.1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Cc: freebsd-arch@freebsd.org Subject: Re: Patch for review: resolve a race condition in [sg]etpriority() X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Feb 2007 22:05:35 -0000 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 John Baldwin wrote: > On Thursday 22 February 2007 12:51, LI Xin wrote: >> Hi, John, >> >> John Baldwin wrote: >>> My only reason for favoring the wakeup for complete initialization is that >>> while this patch may solve the getprio/setprio race, it doesn't solve all >>> PRS_NEW-related races, which the sleep/wakeup proposal did. >> Today I have some time and tried your approach for a second time. It >> looks like that we can not simply sleep with allproc_lock held. The >> attached patchset implements the proof-of-concept idea, please let me >> know if you think this one is better. > > Ok. It would actually be really nice if we could not put the process onto > the allproc list until it was really fully created. Is the only reason we put > it on the list to prevent duplicate pid allocation? For allproc insertion, I think the insert operation itself stands for avoiding duplication only, but the lock have more side effects. Cheers, - -- Xin LI http://www.delphij.net/ FreeBSD - The Power to Serve! -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFF3hOmOfuToMruuMARCmZPAJ9bfQjkwxZHJCH+mrPIytQcnumMXACeLIbX ETesrVoocE3srTogqYBYiyU= =oX7K -----END PGP SIGNATURE-----