Open Bug 533014 Opened 15 years ago Updated 2 years ago

Patches for using NSPR as static libraries

Categories

(NSPR :: NSPR, enhancement)

enhancement

Tracking

(Not tracked)

People

(Reporter: wtc, Unassigned)

References

(Blocks 1 open bug)

Details

Attachments

(1 file, 4 obsolete files)

I'm using this bug report to publish patches that enable using NSPR as static libraries. WARNING: If a process has two copies of NSPR, and an application is not careful in isolating the copies of NSPR (for example, passing a memory block allocated by PR_Malloc of one copy of NSPR to PR_Free of another copy of NSPR, or calling PR_GetError() of one copy of NSPR after an NSPR function in another copy of NSPR failed), things won't work. The best way to ensure a process has only one copy of NSPR is to use NSPR shared libraries (DLLs). The only feature of shared libraries/DLLs that NSPR depends on is the DllMain DLL_THREAD_DETACH notification that NSPR uses to detach native threads not created by NSPR. So I worked on Windows first. The attached patch allows me to build NSPR static libraries properly, and pass all the NSPR test programs. The key changes are: 1. In prtypes.h, I have to disable the PR_EXPORT, PR_IMPORT, and PR_IMPLEMENT macros because they cause NSPR public functions to be exported from a DLL or EXE on Windows. This change requires changes to mozilla/nsprpub/pr/tests/dll to export symbols from the test DLL using a .def file. 2. In w95thred.c, I found an alternative solution for detaching native threads not created by NSPR. All the other changes are build system changes (to not build the DLls) and test changes (to disable tests that are applicable to DLLs only). Some of these changes are generally useful (e.g., the alternative to DllMain). I will have them reviewed and checked in to reduce the size of this patch.
Blocks: 534471
Depends on: 451187
Add 'extern' to PR_IMPORT and PR_IMPORT_DATA in prtypes.h.
Attachment #416182 - Attachment is obsolete: true
Change mozilla/nsprpub/pr/tests/Makefile.in to link with -framework CoreServices -framework CoreFoundation on the Mac.
Attachment #421738 - Attachment is obsolete: true
Updated the patch for NSPR 4.8.6. The thread local storage (TLS) callback code in mozilla/nsprpub/pr/src/md/windows/w95thred.c was updated to survive whole program optimization.
Attachment #447401 - Attachment is obsolete: true
Improved the comments. No other changes.
Attachment #464248 - Attachment is obsolete: true

The bug assignee is inactive on Bugzilla, so the assignee is being reset.

Assignee: wtc → nobody
Status: ASSIGNED → NEW
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: