From nobody@FreeBSD.org  Wed Jul 31 13:15:34 2002
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id 41E1737B4A2
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 31 Jul 2002 13:15:31 -0700 (PDT)
Received: from www.freebsd.org (www.FreeBSD.org [216.136.204.117])
	by mx1.FreeBSD.org (Postfix) with ESMTP id 056E743E4A
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 31 Jul 2002 13:15:31 -0700 (PDT)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.12.4/8.12.4) with ESMTP id g6VKFUOT099837
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 31 Jul 2002 13:15:30 -0700 (PDT)
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.12.4/8.12.4/Submit) id g6VKFUM1099836;
	Wed, 31 Jul 2002 13:15:30 -0700 (PDT)
Message-Id: <200207312015.g6VKFUM1099836@www.freebsd.org>
Date: Wed, 31 Jul 2002 13:15:30 -0700 (PDT)
From: Andriy Gapon <agapon@excite.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: www/mozilla browser serializes DNS lookups
X-Send-Pr-Version: www-1.0

>Number:         41209
>Category:       ports
>Synopsis:       www/mozilla browser serializes DNS lookups
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    gnome
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Jul 31 13:20:04 PDT 2002
>Closed-Date:    Mon Oct 13 20:25:32 PDT 2003
>Last-Modified:  Mon Oct 20 23:10:14 PDT 2003
>Originator:     Andriy Gapon
>Release:        FreeBSD 4.6
>Organization:
>Environment:
FreeBSD edge.foundation.invalid 4.6.1-RELEASE FreeBSD 4.6.1-RELEASE #0: Sun Jul 21 15:07:38 EDT 2002     avg@edge.icyb.net:/sys-devel/obj/sys-devel/src/sys/EDGE  i386  
>Description:
      mozilla serializes DNS lookups, so that if you try open URL with name/nameserver that has very slow DNS response, mozilla is blocked until DNS reply received or timeout happens.
This problem is described in 2 (at least) mozilla PRs, one of them being FreeBSD-specific:
http://bugzilla.mozilla.org/show_bug.cgi?id=159618
http://bugzilla.mozilla.org/show_bug.cgi?id=70213

The only reason I'm filing this as a FreeBSD ports PR is because this problem is quite annoying and it takes mozilla team too long to fix it despite a patch submitted to them.
>How-To-Repeat:
      From http://bugzilla.mozilla.org/show_bug.cgi?id=159618
Reproducible: Always
Steps to Reproduce:
1.take FreeBSD mozilla and open 2 windows
2.open www.nowhere.org in one window, then www.mozilla.org in the other


Actual Results:  "mozilla" window is blocked resolving www.mozilla.org until nowhere.org request times out

Expected Results:  there shouldn't be any interferences between DNS lookups in different windows
>Fix:
      there's a proposed patch in 
http://bugzilla.mozilla.org/show_bug.cgi?id=70213
and in addition to that configure in nsprpub/ should be changed to define
_PR_HAVE_THREADSAFE_GETHOST
for FreeBSD. 
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-ports->gnome 
Responsible-Changed-By: naddy 
Responsible-Changed-When: Thu Aug 1 06:56:04 PDT 2002 
Responsible-Changed-Why:  
over to maintainer 

http://www.freebsd.org/cgi/query-pr.cgi?pr=41209 

From: Maxim Sobolev <sobomax@FreeBSD.org>
To: freebsd-gnats-submit@FreeBSD.org, agapon@excite.com
Cc:  
Subject: Re: ports/41209: www/mozilla browser serializes DNS lookups
Date: Thu, 08 Aug 2002 15:18:13 +0300

 Andriy,
 
 Unfortunately, closer look at FreeBSD dns lookup code revealed that
 gethostbyXXX(3) family of functions aren't thread-safe, as they return
 pointers to a static storage. Therefore, applying the patch "as is"
 could lead to potential problems, when several threads will be trying
 to call gethostbyname(3) simulateneously. The possible solutions are
 to extend FreeBSD libc with gethostbyXXX_r(3) functions, similar to
 ones present in other unices out there (Solaris, HP-UX, BSDI), or to
 modify gethostbyXXX(3) functions to return pointers to a per thread
 storage.
 
 Another approach is to modify Mozilla to use getaddrinfo(3) function,
 which is available on BSDs and is thread-safe by design, instead of
 gethostbyname(3).
 
 -Maxim

From: Maxim Sobolev <sobomax@FreeBSD.org>
To: freebsd-gnats-submit@FreeBSD.org,
	Andriy Gapon <agapon@excite.com>
Cc:  
Subject: Re: ports/41209: www/mozilla browser serializes DNS lookups
Date: Thu, 08 Aug 2002 18:43:16 +0300

 This is a multi-part message in MIME format.
 --------------AC92BCB950830E8C721B2BF3
 Content-Type: text/plain; charset=koi8-r
 Content-Transfer-Encoding: 7bit
 
 Andriy Gapon wrote:
 > 
 > Maxim,
 > 
 > thank you for your time.
 > 
 > On Thu, 8 Aug 2002, Maxim Sobolev wrote:
 > 
 > > ones present in other unices out there (Solaris, HP-UX, BSDI), or to
 > > modify gethostbyXXX(3) functions to return pointers to a per thread
 > > storage.
 > 
 > I assumed this appoach was used in libc_r, my bad, should have checked
 > before making a suggestion.
 > 
 > > Another approach is to modify Mozilla to use getaddrinfo(3) function,
 > > which is available on BSDs and is thread-safe by design, instead of
 > > gethostbyname(3).
 > 
 > I'll look into that.
 
 Attached please find my attempt to emulate gethostbyname_r(3) using
 getaddrinfo(3). I'm currently thinking about putting it into FreeBSD
 libc, but haven't finally decided yet and it will take some time
 anyway, so that feel free to add it as a patch for Mozilla.
 
 Sincerely,
 
 Maxim
 --------------AC92BCB950830E8C721B2BF3
 Content-Type: application/x-unknown-content-type-UltraEdit.c;
  name="gethostbyname_r.c"
 Content-Transfer-Encoding: base64
 Content-Disposition: inline;
  filename="gethostbyname_r.c"
 
 LyoKICogQ29weXJpZ2h0IChjKSAyMDAyIE1heGltIFNvYm9sZXYgPHNvYm9tYXhARnJlZUJT
 RC5vcmc+CiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFu
 ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogKiBt
 b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
 IGNvbmRpdGlvbnMKICogYXJlIG1ldDoKICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
 ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgbm90aWNlLCB0
 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgog
 KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
 IGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
 IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAqICAgIGRvY3VtZW50YXRp
 b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
 b24uCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
 Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
 QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiAqIElNUExJ
 RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
 VElDVUxBUiBQVVJQT1NFCiAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
 VEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCiAqIEZPUiBBTlkgRElSRUNU
 LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
 RU5USUFMCiAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
 VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCiAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
 RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQogKiBIT1dF
 VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
 Q09OVFJBQ1QsIFNUUklDVAogKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
 SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCiAqIE9VVCBPRiBUSEUg
 VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
 VFkgT0YKICogU1VDSCBEQU1BR0UuCiAqLwoKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5j
 bHVkZSA8c3lzL3NvY2tldC5oPgojaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgojaW5jbHVkZSA8
 ZXJybm8uaD4KI2luY2x1ZGUgPG5ldGRiLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1
 ZGUgPHN0cmluZy5oPgoKaW50CmdldGhvc3RieW5hbWVfcihjb25zdCBjaGFyICpuYW1lLCBz
 dHJ1Y3QgaG9zdGVudCAqcmVzdWx0LCBjaGFyICpidWZmZXIsCiAgICBpbnQgYnVmZmxlbiwg
 aW50ICpoZXJyKQp7CglzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaXAsICpyZXM7CglzdHJ1
 Y3Qgc29ja2FkZHJfaW4gKmFkZHI7CglpbnQgaSwgbmFkZHJzLCBydmFsOwoJY2hhciAqY3A7
 CgojZGVmaW5lIENIRUNLTUVNKGNwLCBsZW4pIHtpZiAoKGNoYXIgKiljcCArIGxlbiA+IGJ1
 ZmZlciArIGJ1ZmZsZW4pIGdvdG8gbm9tZW07fQoKCW1lbXNldCgmaGludHMsIDAsIHNpemVv
 ZihoaW50cykpOwoJaGludHMuYWlfZmxhZ3MgPSBBSV9DQU5PTk5BTUU7CgloaW50cy5haV9m
 YW1pbHkgPSBQRl9VTlNQRUM7CgloaW50cy5haV9wcm90b2NvbCA9IElQUFJPVE9fSVA7Cgkv
 KgoJICogU2V0IHRvIFNPQ0tfU1RSRUFNLCBzbyB0aGF0IHdlIGRvbid0IGdldCBkdXBsaWNh
 dGUgZW50cmllcwoJICogZmlyc3Qgb25lIGZvciBUQ1AgYW5kIHNlY29uZCBvbmUgZm9yIFVE
 UC4KCSAqLwoJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKCXJ2YWwgPSBnZXRh
 ZGRyaW5mbyhuYW1lLCBOVUxMLCAmaGludHMsICZyZXMpOwoJaWYgKHJ2YWwgIT0gMCkgewoJ
 CXN3aXRjaCAocnZhbCkgewoJCWNhc2UgRUFJX0FHQUlOOgoJCQkqaGVyciA9IFRSWV9BR0FJ
 TjsKCQkJYnJlYWs7CgoJCWNhc2UgRUFJX05PREFUQToKCQkJKmhlcnIgPSBOT19EQVRBOwoJ
 CQlicmVhazsKCgkJY2FzZSBFQUlfTk9OQU1FOgoJCQkqaGVyciA9IEhPU1RfTk9UX0ZPVU5E
 OwoJCQlicmVhazsKCgkJZGVmYXVsdDoKCQkJKmhlcnIgPSBOT19SRUNPVkVSWTsKCQkJYnJl
 YWs7CgkJfQoJCXJldHVybiAoTkVUREJfSU5URVJOQUwpOwoJfQoKCWlmIChyZXMtPmFpX2Nh
 bm9ubmFtZSAhPSBOVUxMKSB7CgkJQ0hFQ0tNRU0oYnVmZmVyLCBzdHJsZW4ocmVzLT5haV9j
 YW5vbm5hbWUpICsgMSk7CgkJc3RyY3B5KGJ1ZmZlciwgcmVzLT5haV9jYW5vbm5hbWUpOwoJ
 fSBlbHNlIHsKCQlDSEVDS01FTShidWZmZXIsIHN0cmxlbihuYW1lKSArIDEpOwoJCXN0cmNw
 eShidWZmZXIsIG5hbWUpOwoJfQoKCWNwID0gYnVmZmVyICsgc3RybGVuKGJ1ZmZlcikgKyAx
 OwoJcmVzdWx0LT5oX25hbWUgPSBidWZmZXI7CgoJLyoKCSAqIFhYWDoga2x1ZGdlIHRvIGZp
 bGwgYXQgbGVhc3Qgc29tZXRoaW5nIGludG8gaF9hbGlhc2VzLgoJICogVW5saWtlIGdldGhv
 c3RieW5hbWUoMyksIGdldGFkZHJpbmZvKDMpIGRvZXNuJ3QgcmV0dXJuCgkgKiBob3N0J3Mg
 YWxpYXNlcy4KCSAqLwoJaWYgKHN0cmNtcChyZXN1bHQtPmhfbmFtZSwgbmFtZSkgIT0gMCkg
 ewoJCUNIRUNLTUVNKGNwLCBzdHJsZW4obmFtZSkgKyAxICsgc2l6ZW9mKGNoYXIgKikgKiAy
 KTsKCQlzdHJjcHkoY3AsIG5hbWUpOwoJCShjaGFyICopcmVzdWx0LT5oX2FsaWFzZXMgPSBj
 cCArIHN0cmxlbihjcCkgKyAxOwoJCXJlc3VsdC0+aF9hbGlhc2VzWzBdID0gY3A7CgkJcmVz
 dWx0LT5oX2FsaWFzZXNbMV0gPSBOVUxMOwoJCShjaGFyICoqKWNwID0gcmVzdWx0LT5oX2Fs
 aWFzZXMgKyAyOwoJfSBlbHNlIHsKCQlDSEVDS01FTShjcCwgc2l6ZW9mKGNoYXIgKikgKiAx
 KTsKCQkoY2hhciAqKXJlc3VsdC0+aF9hbGlhc2VzID0gY3A7CgkJcmVzdWx0LT5oX2FsaWFz
 ZXNbMF0gPSBOVUxMOwoJCShjaGFyICoqKWNwID0gcmVzdWx0LT5oX2FsaWFzZXMgKyAxOwoJ
 fQoKCXJlc3VsdC0+aF9hZGRydHlwZSA9IEFGX0lORVQ7CglyZXN1bHQtPmhfbGVuZ3RoID0g
 c2l6ZW9mKHVpbnQzMl90KTsKCW5hZGRycyA9IDA7Cglmb3IgKGFpcCA9IHJlczsgYWlwICE9
 IE5VTEw7IGFpcCA9IGFpcC0+YWlfbmV4dCkgewoJCSh2b2lkICopYWRkciA9IGFpcC0+YWlf
 YWRkcjsKCQlDSEVDS01FTShjcCwgcmVzdWx0LT5oX2xlbmd0aCk7CgkJKih1aW50MzJfdCAq
 KWNwID0gYWRkci0+c2luX2FkZHIuc19hZGRyOwoJCWNwICs9IHJlc3VsdC0+aF9sZW5ndGg7
 CgkJbmFkZHJzKys7Cgl9CglDSEVDS01FTShjcCwgc2l6ZW9mKGNoYXIgKikgKiAobmFkZHJz
 ICsgMSkpOwoJcmVzdWx0LT5oX2FkZHJfbGlzdCA9IChjaGFyICoqKWNwOwoJY3AgLT0gbmFk
 ZHJzICogcmVzdWx0LT5oX2xlbmd0aDsKCWZvciAoaSA9IDA7IGkgPCBuYWRkcnM7IGkrKykK
 CQlyZXN1bHQtPmhfYWRkcl9saXN0W2ldID0gY3AgKyAoaSAqIHJlc3VsdC0+aF9sZW5ndGgp
 OwoJcmVzdWx0LT5oX2FkZHJfbGlzdFtuYWRkcnNdID0gTlVMTDsKCglmcmVlYWRkcmluZm8o
 cmVzKTsKCSpoZXJyID0gTkVUREJfU1VDQ0VTUzsKCXJldHVybiAoTkVUREJfU1VDQ0VTUyk7
 Cgpub21lbToKCWZyZWVhZGRyaW5mbyhyZXMpOwoJKmhlcnIgPSBORVREQl9JTlRFUk5BTDsK
 CXJldHVybiAoRVJBTkdFKTsKfQovKgppbnQgbWFpbigpCnsKCXN0cnVjdCBob3N0ZW50IGVu
 dCwgKmVudDE7CgljaGFyIGJ1ZlsyMDQ4XTsKCWludCBoZXJyOwoKCWVudDEgPSBnZXRob3N0
 YnluYW1lKCJ3d3cueWFob28uY29tIik7CglnZXRob3N0YnluYW1lX3IoInd3dy55YWhvby5j
 b20iLCAmZW50LCBidWYsIHNpemVvZihidWYpLCAmaGVycik7Cn0qLwo=
 --------------AC92BCB950830E8C721B2BF3--
 

From: Maxim Sobolev <sobomax@FreeBSD.org>
To: Andriy Gapon <agapon@excite.com>,
	freebsd-gnats-submit@FreeBSD.org
Cc:  
Subject: Re: ports/41209: www/mozilla browser serializes DNS lookups (fwd)
Date: Fri, 09 Aug 2002 12:15:18 +0300

 Andriy Gapon wrote:
 > 
 > Maxim,
 > 
 > sorry for a chain of mails. In -STABLE both getaddrinfo and getnameinfo
 > manuals have this comment:
 > 
 > BUGS
 >      The current implementation is not thread-safe.
 > 
 > and the code has a number of static variables, although I didn't check
 > their usage carefully.
 > What do you think ?
 
 Quick look at the code in question left me with impression that those
 static structures are used as constants, so that there should be no
 problems. The problem might be that the manpage is quite outdated and
 doesn't match the reality (check comments at the very top of
 getaddrinfo.c).
 
 -Maxim

From: Maxim Sobolev <sobomax@FreeBSD.org>
To: Andriy Gapon <agapon@excite.com>,
	freebsd-gnats-submit@FreeBSD.org
Cc:  
Subject: Re: ports/41209: www/mozilla browser serializes DNS lookups
Date: Fri, 09 Aug 2002 12:12:44 +0300

 Andriy Gapon wrote:
 > 
 > On Thu, 8 Aug 2002, Maxim Sobolev wrote:
 > > Attached please find my attempt to emulate gethostbyname_r(3) using
 > > getaddrinfo(3). I'm currently thinking about putting it into FreeBSD
 > > libc, but haven't finally decided yet and it will take some time
 > > anyway, so that feel free to add it as a patch for Mozilla.
 > >
 > 
 > Maxim,
 > 
 > Thanks a lot! I will try to make up a freebsd patch mozilla using your
 > code and similiar thing for gethostbyaddr() (mozilla uses it too).
 > 
 > btw, is situation the same with -CURRENT too ?
 > Just in case you might have missed it, there is a patch for libc by
 > Alexander Litvin :
 >  http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/29581
 
 WOW, I'll definitely take a look at it.
 
 -Maxim
State-Changed-From-To: open->closed 
State-Changed-By: marcus 
State-Changed-When: Mon Oct 13 20:24:33 PDT 2003 
State-Changed-Why:  
FreeBSD most likely needs a good version of gethostbyname_r.  However, things 
seem to have stabilized recently, and lookups aren't as time consuming as 
they used to be. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=41209 

From: Andriy Gapon <agapon@cv-nj.com>
To: freebsd-gnats-submit@FreeBSD.org, sobomax@freebsd.org
Cc:  
Subject: Re: ports/41209: www/mozilla browser serializes DNS lookups
Date: Tue, 21 Oct 2003 02:03:07 -0400

 I agree that this PR should be closed, there is not much that can be done with 
 respect to this. Hopefully we will have thread-safe gethostbyXXX() in 5.x 
 someday, but 4.x is hopeless - gethostbyXXX() are not thread-safe, there are 
 no gethostbyXXX_r() and getaddrinfo() is serialized internally, so much for 
 parallel DNS lookups.
 
 -- 
 Andriy Gapon
 
>Unformatted:
