classification
Title: getaddrinfo is thread-safe on NetBSD and OpenBSD
Type: Stage: resolved
Components: Versions: Python 3.6, Python 3.5, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: emptysquare, gvanrossum, martin.panter, ned.deily, python-dev, ronaldoussoren, yselivanov
Priority: normal Keywords: patch

Created on 2016-02-22 03:33 by emptysquare, last changed 2016-02-23 13:27 by emptysquare. This issue is now closed.

Files
File name Uploaded Description Edit
26406-getaddrinfo-netbsd-openbsd.patch emptysquare, 2016-02-22 03:40 review
Messages (5)
msg260655 - (view) Author: A. Jesse Jiryu Davis (emptysquare) * Date: 2016-02-22 03:33
In socketmodule.c we lock around getaddrinfo calls on platforms where getaddrinfo is believed not to be thread-safe. We've verified that it *is* thread-safe, and therefore stopped locking around it, on FreeBSD 5.3+ (#1288833) and Mac OS X 10.5+ (#25924). This ticket intends to do the same for OpenBSD and NetBSD.

OpenBSD 5.4 fixed getaddrinfo's thread safety and announced it 2013-11-01, "getaddrinfo(3) is now thread-safe":

http://www.openbsd.org/plus54.html

NetBSD's fix is older and less publicized. Since ancient times NetBSD's getaddrinfo.c included a comment, "Thread safe-ness must be checked", and the getaddrinfo(3) man page had the same warning as other BSDs, "The implementation of getaddrinfo is not thread-safe." On 2004-05-27 Christos Zoulas committed with the comment "make yp stuff re-entrant", fixing obvious problems like static variables in getaddrinfo:

http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/net/getaddrinfo.c.diff?r1=1.71&r2=1.72&only_with_tag=MAIN

That change was released with NetBSD 3.0, and that alone might convince us to stop locking around getaddrinfo. Later, on 2006-07-18, between NetBSD 3 and 4, Zoulas deleted the comment "Thread safe-ness must be checked" from the source, with the message "Remove comments that do not reflect reality anymore":

http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/net/getaddrinfo.c.diff?r1=1.82&r2=1.83&only_with_tag=MAIN

The same day, he removed the man page warning:

http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/net/getaddrinfo.3.diff?r1=1.43&r2=1.44&only_with_tag=MAIN

NetBSD 4.0 was released 2007-12-19.
msg260657 - (view) Author: A. Jesse Jiryu Davis (emptysquare) * Date: 2016-02-22 03:40
Patch uploaded.

I've copied the "nosy" list from #25924, if that was bad etiquette please forgive me.
msg260726 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2016-02-23 11:10
New changeset 52a8c1965750 by Ned Deily in branch '2.7':
Issue #26406: Avoid unnecessary serialization of getaddrinfo(3) calls on
https://hg.python.org/cpython/rev/52a8c1965750

New changeset 419d20551d26 by Ned Deily in branch '3.5':
Issue #26406: Avoid unnecessary serialization of getaddrinfo(3) calls on
https://hg.python.org/cpython/rev/419d20551d26

New changeset 5ffebeb3e91d by Ned Deily in branch 'default':
Issue #26406: merge from 3.5
https://hg.python.org/cpython/rev/5ffebeb3e91d
msg260727 - (view) Author: Ned Deily (ned.deily) * (Python committer) Date: 2016-02-23 11:15
Thanks for the additional patch, Jesse. Since we don't have a NetBSD buildbot and I don't have any NetBSD or OpenBSD systems at hand to do any testing, I'll take your word for the version checks.  If anyone runs into any problems because of these changes, feel free to re-open this issue.  Pushed for release in 2.7.12, 3.5.2, and 3.6.0.
msg260730 - (view) Author: A. Jesse Jiryu Davis (emptysquare) * Date: 2016-02-23 13:27
Thank you!
History
Date User Action Args
2016-02-23 13:27:11emptysquaresetmessages: + msg260730
2016-02-23 11:15:30ned.deilysetstatus: open -> closed
resolution: fixed
messages: + msg260727

stage: resolved
2016-02-23 11:10:55python-devsetmessages: + msg260726
2016-02-22 03:40:19emptysquaresetfiles: + 26406-getaddrinfo-netbsd-openbsd.patch
keywords: + patch
messages: + msg260657
2016-02-22 03:33:13emptysquarecreate