From: rasmus When using any of the threaded mpms in Apache 2.0 it is important
+ that every function from Apache be thread safe. When linking in 3rd
+ party extensions it can be difficult to determine whether the resulting
+ server will be thread safe. Casual testing generally won't tell you this
+ either as thread safety problems can lead to subtle race conditons that
+ may only show up in certain conditions under heavy load. The following is a list of common libraries that are used by 3rd party
+ Apache modules. You can check to see if your module is using a potentially
+ unsafe library by using tools such as ldd and nm. For PHP,
+ for example, try this:
+Thread Safetyness
+ Common 3rd Party Libraries
+ % ldd libphp4.so
+libsablot.so.0 => /usr/local/lib/libsablot.so.0 (0x401f6000)
+libexpat.so.0 => /usr/lib/libexpat.so.0 (0x402da000)
+libsnmp.so.0 => /usr/lib/libsnmp.so.0 (0x402f9000)
+libpdf.so.1 => /usr/local/lib/libpdf.so.1 (0x40353000)
+libz.so.1 => /usr/lib/libz.so.1 (0x403e2000)
+libpng.so.2 => /usr/lib/libpng.so.2 (0x403f0000)
+libmysqlclient.so.11 => /usr/lib/libmysqlclient.so.11 (0x40411000)
+libming.so => /usr/lib/libming.so (0x40449000)
+libm.so.6 => /lib/libm.so.6 (0x40487000)
+libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x404a8000)
+libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x404e7000)
+libcrypt.so.1 => /lib/libcrypt.so.1 (0x40505000)
+libssl.so.2 => /lib/libssl.so.2 (0x40532000)
+libcrypto.so.2 => /lib/libcrypto.so.2 (0x40560000)
+libresolv.so.2 => /lib/libresolv.so.2 (0x40624000)
+libdl.so.2 => /lib/libdl.so.2 (0x40634000)
+libnsl.so.1 => /lib/libnsl.so.1 (0x40637000)
+libc.so.6 => /lib/libc.so.6 (0x4064b000)
+/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
+In addition to these libraries you will need to have a look at any libraries
+linked statically into the module. You can use nm to look for individual
+symbols in the module.
Please drop a note to rasmus@apache.org [need a better contact address here] if + you have additions or corrections to this list.
++
Library | Version | Thread Safe? | Notes |
---|---|---|---|
ASpell/PSpell | ? | ||
Berkeley DB | ? | ||
BZip2 | ? | ||
cdb | ? | ||
C-Client | ? | ||
cpdflib | ? | ||
libcrypt | ? | ||
Expat | Yes | Need a separate parser instance per thread | |
FreeTDS | ? | ||
FreeType | ? | ||
GD 1.8.x | ? | ||
GD 2.0.x | ? | ||
gdbm | ? | ||
ImageMagick | ? | ||
Imlib2 | ? | ||
libjpeg | v6b | ? | |
libmysqlclient | ? | ||
Ming | 0.2a | ? | |
Net-SNMP | 5.0.x | ? | |
OpenLDAP | 2.1.x | ? | |
OpenSSL | 0.96g | ? | |
liboci8 (Oracle 8+) | 8.x,9.x | ? | |
pdflib | 4.0.x | ? | |
libpng | 1.0.x | ? | |
libpng | 1.2.x | ? | |
libpq (PostgreSQL) | 7.x | Yes | Don't share connections across threads and watch out for crypt() calls |
Sablotron | 0.95 | ? | |
zlib | 1.1.4 | ? |