Bug 1753127 - NSPR doc: Remove some old docs UPGRADE_NSS_RELEASE r=bbeurdouche

Depends on D137588

Differential Revision: https://phabricator.services.mozilla.com/D137589
This commit is contained in:
Sylvestre Ledru 2022-02-02 17:19:49 +00:00
parent 1666595fdb
commit ecac0317d5
4 changed files with 3 additions and 572 deletions

View file

@ -156,10 +156,7 @@ Where It's Headed
~~~~~~~~~~~~~~~~~
NSPR is applicable as a platform on which to write threaded applications
that need to be ported to multiple platforms. The current implementation
supports Macintosh (PPC), WIN-32 (WinNT, Win9x) and 20 versions of UNIX
and is still expanding. The basic API is stable and expected to remain
that way.
that need to be ported to multiple platforms.
NSPR is functionally complete and has entered a mode of sustaining
engineering. As operating system vendors issue new releases of their

View file

@ -45,186 +45,3 @@ Multiplatform
flaw has shown up in any tests or products - yet. The specific area
surrounding pthread's *continuation thread* has been both observed
and empirically proven faulty, and a correction identified.
.. _Macintosh:
Macintosh
---------
- The current port of NSPR for Macintosh will not be usable in its own
right. The implementation has dependencies on libraries that are
implemented in the Netscape Communicator. The work to undo this
dependency has already been started and the result will be made
available soon.
- Macintosh threads are not preemptable. As usual, it isn't that we
couldn't preempt them, but rather that the Macintosh libraries are
not prepared for such things to happen. NSPR does take advantage of
Macintosh' asynchronous I/O capability to perform scheduling during
I/O. Still, there is no enforceable mechanism to guarantee thread
scheduling fairness.
- Calendar time facilities are limited on Macintosh. One can only
determine the immediate setting of Daylight Savings Time, not what it
would be at some arbitrary time in the past or the future.
- Initialization of NSPR may fail if the host is not connected to a
network of some kind.
.. _WIN-16:
WIN-16
------
.. code:: eval
http://www.sybase.com/products/languages/watccpl.html
The WIN-16 port is unique in the NSPR world in that it uses the WATCOM
development environment. This environment does bring along some of its
own special trappings.
- Win16 uses co-operative non-preemptive dispatching for its own
processes. This means that when the application using NSPR is
dispatched, a thread within that application will run until that
thread voluntarily gives up control to another thread within the
process. Further, the process in which the threads are being emulated
will run until it invokes some function that gives control to
Windows.
- Windows 3.1 applications always run on a stack provided by Windows.
This means that NSPR threads use a *shadow stack* to preserve context
across a thread switch. At thread switch time, the stack of the
current running thread is copied to other storage associated with
that thread and the about-to-be-dispatched thread's stack data is
copied back onto the Windows stack just before the thread is given
control. This has disastrous implications on the generally accepted
programming practice of taking the address of a stack variable and
giving that address to another thread.
Consider that the Windows stack is swapped in and out with each thread
switch. The thread that created a stack variable sees his own stack
variables correctly across thread switches. However, another thread does
not see the data as intended because the stack has been swapped out to
the *shadow stack* and the current thread's stack now occupies the
Windows stack. This can be difficult to diagnose.
For complete cross platform portability, do not take the address of a
stack variable and make that address available to another thread. For
more details, see the memo on `Automatic
Addresses <http://www.mozilla.org/projects/nspr/tech-notes/autoaddresses.html>`__.
- Windows 3.1 does not support 64 bit file offsets. The NSPR 64 bit
file offset APIs map to Windows 3.1 32 bit file offset APIs. You may
use NSPR's 64bit file offset APIs in your Windows 3.1 applications
for cross platform consistency, but do not expect to see real 64 bit
file offset behavior. On Windows 3.1, when NSPR detects a value in a
64 bit file offset greater than 32bit significance, it terminates
with an ASSERT.
- The general rules of 16 bit Large Model memory restrictions apply to
applications using NSPR on Windows 3.1.
- The NSPR Process Creation API functions return an error when invoked
on Windows 3.1.
- Functions called in an application by a shared library require an
additional function prolog. The prolog is presented in the macro
<tt>PR_CALLBACK</tt>. For any function made available to any shared
library (most likely passed in as a function pointer), that function
must have the <tt>PR_CALLBACK</tt> qualifier.
- NSPR functions are normally declared <tt>__cdecl</tt>. These
declarations are hidden in the <tt>PR_EXTERN()</tt> declarations in
NSPR's header files. NSPR functions returning floating point types
and structs by value, including the derived types PRInt64, are
declared <tt>__PASCAL</tt>. These different declarations are to
accommodate restrictions in Watcom's C/C++ version 11.0 and 11.0a
compiler.
- Windows 3.1 does not provide a non-blocking file I/O interface.
NSPR's file I/O is done using Windows 3.1's synchronous file I/O API.
The NSPR file I/O APIs may cause a thread switch even though the I/O
is fully synchronous. Do not depend on File I/O being synchronous.
- Command line applications using the LIBC printf() and related APIs
behave funny on Windows 3.1. Read the fine print in the Windows SDK
for the grizzly details.
- Watch out for PRIntn overflow on Win16. Make sure all possible values
of your PRIntn variables are within 2^16.
.. _WIN-95:
WIN-95
------
The WIN-95 version of NSPR should really be labeled WIN-32. The same
library will work on either WIN-NT or WIN-95.
- WIN-95 NSPR uses native threads as NSPR threads. Generally speaking,
the native threads (on NT or '95) are quite functional. However,
having lots of them (100s or even 1000s) is unrealistic.
- <tt>PR_Interrupt()</tt> is not implemented.
.. _WIN-NT:
WIN-NT
------
The WIN-NT port of NSPR takes advantage of some of the `features of
NT <en/Using_IO_Timeout_And_Interrupt_On_NT>`__ that are not available
in WIN-95, such as fibers and asynch I/O. The implementation is well
suited for high performance application, such as a server, but clients
may find the WIN-95 version more suited (and adequate) for interactive
applications such as are prevalent on today's workstations.
- The NT version implements a MxN threading model, using native NT
threads as the virtual processors and NT's fiber abstraction as the
locally scheduled threads. The fibers are nice because much of the NT
API understands them. But they are not really preemptable, and that
can lead to problems, depending on the needs of your application.
- The mode (blocking or nonblocking) of a socket cannot be changed at
will once the socket has been used. Also, the new socket created by
an <tt>PR_Accept()</tt> call on a listening socket inherits the mode
of the listening socket, and cannot be changed.
- A file descriptor is not usable after an IO operation on it fails
with either <tt>PR_IO_TIMEOUT_ERROR</tt> or
<tt>PR_IO_INTERRUPT_ERROR</tt>. The only thing you can do is to close
the file descriptor. See the FAQ article for more info. There is no
current workaround. You must write your program with this restriction
in mind.
- PR_Interrupt is implemented except for <tt>PR_Connect()</tt>.
.. _IRIX:
IRIX
----
- The IRIX (classic) implementation has a known race condition in
creating new threads. If the spawned thread establishes and exits
before the parent thread is resumed, the parent will be left with an
invalid pointer to the child. The problem has a solution that will be
available soon.
.. _Digital_Unix:
Digital Unix
------------
- Digital Unix (aka, OSF1) requires the latest patches for the pthreads
library. The changes are not evident until one tries to do thread
suspension (<tt>PR_SuspendAll()</tt>) which is in preparation for
garbage collection.
- Digital Unix is the main platform used for NSPR's prototype use of
IPv6. There are some conflicts between the patches needed to use IPv6
and those needed for pthreads. The IPv6 kit needs to be applied on a
baseline configuration of Digital Unix V4.0B.
.. _Linux:
Linux
-----
- The pthreads version of Linux (which is not the default) uses the
same signals that NSPR uses to suspend threads in preparation for
garbage collection. No solution in hand.
.. _OS2:
OS/2
----
- The OS/2 port is not functional in its current state due to the
requirement to remove some files that could not be shipped under the
NPL. This problem has been resolved and an update will be appearing
shortly.

View file

@ -1,13 +0,0 @@
Programs using NSPR
===================
The following programs are known to use NSPR, or portions of it:
- `Gecko </en-US/docs/Gecko>`__ using programs (Mozilla Application
Suite, Firefox, Thunderbird, Camino, etc.)
- Many Fedora/Red Hat and Sun server applications. Most of these are
derived from Netscape servers.
- Netscape alumni took NSPR with them to their new companies: `Good
Technology <http://www.good.com/>`__,
`Kontiki <http://www.kontiki.com/>`__, `Tellme
Networks <http://www.tellme.com/>`__.

View file

@ -1,371 +1,5 @@
.. container:: section
:name: Quick_Links
#. `NSPR </en-US/docs/Mozilla/Projects/NSPR>`__
#. `About NSPR </en-US/docs/Mozilla/Projects/NSPR/About_NSPR>`__
#. `NSPR API
Reference </en-US/docs/Mozilla/Projects/NSPR/Reference>`__
#. `NSPR Build
Instruction </en-US/docs/Mozilla/Projects/NSPR/NSPR_build_instructions>`__
#. `NSPR Release
Process </en-US/docs/Mozilla/Projects/NSPR/Release_process>`__
#. Introduction to NSPR
#. `NSPR Naming
Conventions </en-US/docs/Mozilla/Projects/NSPR/Reference/Introduction_to_NSPR#NSPR_Naming_Conventions>`__
#. `NSPR
Threads </en-US/docs/Mozilla/Projects/NSPR/Reference/Introduction_to_NSPR#NSPR_Threads>`__
#. `Thread
Scheduling </en-US/docs/Mozilla/Projects/NSPR/Reference/Introduction_to_NSPR#Thread_Schedoling>`__
#. `Setting Thread
Priorities </en-US/docs/Mozilla/Projects/NSPR/Reference/Introduction_to_NSPR#Setting_Thread_Priorities>`__
#. `Preempting
Threads </en-US/docs/Mozilla/Projects/NSPR/Reference/Introduction_to_NSPR#Preempting_Threads>`__
#. `Interrupting
Threads </en-US/docs/Mozilla/Projects/NSPR/Reference/Introduction_to_NSPR#Interrupting_Threads>`__
#. `NSPR Thread
Synchronization </en-US/docs/Mozilla/Projects/NSPR/Reference/Introduction_to_NSPR#NSPR_Thread_Synchronization>`__
#. `Locks and
Monitors </en-US/docs/Mozilla/Projects/NSPR/Reference/Introduction_to_NSPR#Locks_and_Monitors>`__
#. `Condition
Variables </en-US/docs/Mozilla/Projects/NSPR/Reference/Introduction_to_NSPR#Condition_Variables>`__
#. `NSPR Sample
Code </en-US/docs/Mozilla/Projects/NSPR/Reference/Introduction_to_NSPR#NSPR_Sample_Code>`__
#. NSPR Types
#. `Calling Convention
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Types#Calling_Convention_Types>`__
#. `Algebraic
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Types#Algebraic_Types>`__
#. `8-, 16-, and 32-bit Integer
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Types#8-.2C_16-.2C_and_32-bit_Integer_Types>`__
#. `Signed
Integers </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Types#Signed_Integers>`__
#. `Unsigned
Integers </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Types#Unsigned_Integers>`__
#. `64-bit Integer
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Types#64-bit_Integer_Types>`__
#. `Floating-Point Integer
Type </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Types#Floating-Point_Number_Type>`__
#. `Native OS Integer
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Types#Native_OS_Integer_Types>`__
#. `Miscellaneous
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Types#Miscellaneous_Types>`__
#. `Size
Type </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Types#Size_Type>`__
#. `Pointer Difference
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Types#Pointer_Difference_Types>`__
#. `Boolean
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Types#Boolean_Types>`__
#. `Status Type for Return
Values </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Types#Status_Type_for_Return_Values>`__
#. Threads
#. `Threading Types and
Constants </en-US/docs/Mozilla/Projects/NSPR/Reference/Threads#Threading_Types_and_Constants>`__
#. `Threading
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Threads#Threading_Functions>`__
#. `Creating, Joining, and Identifying
Threads </en-US/docs/Mozilla/Projects/NSPR/Reference/Threads#Creating.2C_Joining.2C_and_Identifying_Threads>`__
#. `Controlling Thread
Priorities </en-US/docs/Mozilla/Projects/NSPR/Reference/Threads#Controlling_Thread_Priorities>`__
#. `Controlling Per-Thread Private
Data </en-US/docs/Mozilla/Projects/NSPR/Reference/Threads#Controlling_Per-Thread_Private_Data>`__
#. `Interrupting and
Yielding </en-US/docs/Mozilla/Projects/NSPR/Reference/Threads#Interrupting_and_Yielding>`__
#. `Setting Global Thread
Concurrency </en-US/docs/Mozilla/Projects/NSPR/Reference/Threads#Setting_Global_Thread_Concurrency>`__
#. `Getting a Thread's
Scope </en-US/docs/Mozilla/Projects/NSPR/Reference/Threads#Getting_a_Thread.27s_Scope>`__
#. Process Initialization
#. `Identity and
Versioning </en-US/docs/Mozilla/Projects/NSPR/Reference/Process_Initialization#Identity_and_Versioning>`__
#. `Name and Version
Constants </en-US/docs/Mozilla/Projects/NSPR/Reference/Process_Initialization#Name_and_Version_Constants>`__
#. `Initialization and
Cleanup </en-US/docs/Mozilla/Projects/NSPR/Reference/Process_Initialization#Initialization_and_Cleanup>`__
#. `Module
Initialization </en-US/docs/Mozilla/Projects/NSPR/Reference/Process_Initialization#Module_Initialization>`__
#. Locks
#. `Lock
Type </en-US/docs/Mozilla/Projects/NSPR/Reference/Locks#Lock_Type>`__
#. `Lock
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Locks#Lock_Functions>`__
#. Condition Variables
#. `Condition Variable
Type </en-US/docs/Mozilla/Projects/NSPR/Reference/Condition_Variables#Condition_Variable_Type>`__
#. `Condition Variable
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Condition_Variables#Condition_Variable_Functions>`__
#. Monitors
#. `Monitor
Type </en-US/docs/Mozilla/Projects/NSPR/Reference/Monitors#Monitor_Type>`__
#. `Monitor
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Monitors#Monitor_Functions>`__
#. Cached Monitors
#. `Cached Monitor
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Cached_Monitors#Cached_Monitor_Functions>`__
#. I/O Types
#. `Directory
Type </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Types#Directory_Type>`__
#. `File Descriptor
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Types#File_Descriptor_Types>`__
#. `File Info
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Types#File_Info_Types>`__
#. `Network Address
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Types#Network_Address_Types>`__
#. `Types Used with Socket Options
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Types#Types_Used_with_Socket_Options_Functions>`__
#. `Type Used with Memory-Mapped
I/O </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Types#Type_Used_with_Memory-Mapped_I.2FO>`__
#. `Offset Interpretation for Seek
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Types#Offset_Interpretation_for_Seek_Functions>`__
#. I/O Functions
#. `Functions that Operate on
Pathnames </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Functions#Functions_that_Operate_on_Pathnames>`__
#. `Functions that Act on File
Descriptors </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Functions#Functions_that_Act_on_File_Descriptors>`__
#. `Directory I/O
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Functions#Directory_I.2FO_Functions>`__
#. `Socket Manipolation
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Functions#Socket_Manipolation_Functions>`__
#. `Converting Between Host and Network
Addresses </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Functions#Converting_Between_Host_and_Network_Addresses>`__
#. `Memory-Mapped I/O
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Functions#Memory-Mapped_I.2FO_Functions>`__
#. `Anonymous Pipe
Function </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Functions#Anonymous_Pipe_Function>`__
#. `Polling
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Functions#Polling_Functions>`__
#. `Pollable
Events </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Functions#Pollable_Events>`__
#. `Manipulating
Layers </en-US/docs/Mozilla/Projects/NSPR/Reference/I_O_Functions#Manipulating_Layers>`__
#. Network Addresses
#. `Network Address Types and
Constants </en-US/docs/Mozilla/Projects/NSPR/Reference/Network_Addresses#Network_Address_Types_and_Constants>`__
#. `Network Address
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Network_Addresses#Network_Address_Functions>`__
#. Atomic Operations
#. `PR_AtomicIncrement </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_AtomicIncrement>`__
#. `PR_AtomicDecrement </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_AtomicDecrement>`__
#. `PR_AtomicSet </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_AtomicSet>`__
#. Interval Timing
#. `Interval Time Type and
Constants </en-US/docs/Mozilla/Projects/NSPR/Reference/Interval_Timing#Interval_Time_Type_and_Constants>`__
#. `Interval
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Interval_Timing#Interval_Functions>`__
#. Date and Time
#. `Types and
Constants </en-US/docs/Mozilla/Projects/NSPR/Reference/Date_and_Time#Types_and_Constants>`__
#. `Time Parameter Callback
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Date_and_Time#Time_Parameter_Callback_Functions>`__
#. `Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Date_and_Time#Functions>`__
#. Memory Management Operations
#. `Memory Allocation
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Memory_Management_Operations#Memory_Allocation_Functions>`__
#. `Memory Allocation
Macros </en-US/docs/Mozilla/Projects/NSPR/Reference/Memory_Management_Operations#Memory_Allocation_Macros>`__
#. String Operations
#. `PL_strlen </en-US/docs/Mozilla/Projects/NSPR/Reference/PL_strlen>`__
#. `PL_strcpy </en-US/docs/Mozilla/Projects/NSPR/Reference/PL_strcpy>`__
#. `PL_strdup </en-US/docs/Mozilla/Projects/NSPR/Reference/PL_strdup>`__
#. `PL_strfree </en-US/docs/Mozilla/Projects/NSPR/Reference/PL_strfree>`__
#. Floating Point Number to String Conversion
#. `PR_strtod </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_strtod>`__
#. `PR_dtoa </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_dtoa>`__
#. `PR_cnvtf </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_cnvtf>`__
#. Linked Lists
#. `Linked List
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/Linked_Lists#Linked_List_Types>`__
#. `PRCList </en-US/docs/Mozilla/Projects/NSPR/Reference/PRCList>`__
#. `Linked List
Macros </en-US/docs/Mozilla/Projects/NSPR/Reference/Linked_Lists#Linked_List_Macros>`__
#. `PR_INIT_CLIST </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_INIT_CLIST>`__
#. `PR_INIT_STATIC_CLIST </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_INIT_STATIC_CLIST>`__
#. `PR_APPEND_LINK </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_APPEND_LINK>`__
#. `PR_INSERT_LINK </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_INSERT_LINK>`__
#. `PR_NEXT_LINK </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_NEXT_LINK>`__
#. `PR_PREV_LINK </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_PREV_LINK>`__
#. `PR_REMOVE_LINK </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_REMOVE_LINK>`__
#. `PR_REMOVE_AND_INIT_LINK </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_REMOVE_AND_INIT_LINK>`__
#. `PR_INSERT_BEFORE </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_INSERT_BEFORE>`__
#. `PR_INSERT_AFTER </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_INSERT_AFTER>`__
#. Dynamic Library Linking
#. `Library Linking
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/Dynamic_Library_Linking#Library_Linking_Types>`__
#. `PRLibrary </en-US/docs/Mozilla/Projects/NSPR/Reference/PRLibrary>`__
#. `PRStaticLinkTable </en-US/docs/Mozilla/Projects/NSPR/Reference/PRStaticLinkTable>`__
#. `Library Linking
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Dynamic_Library_Linking#Library_Linking_Functions>`__
#. `PR_SetLibraryPath </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_SetLibraryPath>`__
#. `PR_GetLibraryPath </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_GetLibraryPath>`__
#. `PR_GetLibraryName </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_GetLibraryName>`__
#. `PR_FreeLibraryName </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_FreeLibraryName>`__
#. `PR_LoadLibrary </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_LoadLibrary>`__
#. `PR_UnloadLibrary </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_UnloadLibrary>`__
#. `PR_FindSymbol </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_FindSymbol>`__
#. `PR_FindSymbolAndLibrary </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_FindSymbolAndLibrary>`__
#. `Finding Symbols Defined in the Main Executable
Program </en-US/docs/Mozilla/Projects/NSPR/Reference/Dynamic_Library_Linking#Finding_Symbols_Defined_in_the_Main_Executable_Program>`__
#. `Platform
Notes </en-US/docs/Mozilla/Projects/NSPR/Reference/Dynamic_Library_Linking#Platform_Notes>`__
#. `Dynamic Library Search
Path </en-US/docs/Mozilla/Projects/NSPR/Reference/Dynamic_Library_Linking#Dynamic_Library_Search_Path>`__
#. `Exporting Symbols from the Main Executable
Program </en-US/docs/Mozilla/Projects/NSPR/Reference/Dynamic_Library_Linking#Exporting_Symbols_from_the_Main_Executable_Program>`__
#. Process Management and Interprocess Communication
#. `Process Management Types and
Constants </en-US/docs/Mozilla/Projects/NSPR/Reference/Process_Management_and_Interprocess_Communication#Process_Management_Types_and_Constants>`__
#. `PRProcess </en-US/docs/Mozilla/Projects/NSPR/Reference/PRProcess>`__
#. `PRProcessAttr </en-US/docs/Mozilla/Projects/NSPR/Reference/PRProcessAttr>`__
#. `Process Management
Functions </en-US/en-US/docs/Mozilla/Projects/NSPR/Reference/Process_Management_and_Interprocess_Communication#Process_Management_Functions>`__
#. `Setting the Attributes of a New
Process </en-US/docs/Mozilla/Projects/NSPR/Reference/Process_Management_and_Interprocess_Communication#Setting_the_Attributes_of_a_New_Process>`__
#. `Creating and Managing
Processes </en-US/docs/Mozilla/Projects/NSPR/Reference/Process_Management_and_Interprocess_Communication#Creating_and_Managing_Processes>`__
#. Logging
#. `Conditional Compilation and
Execution </en-US/docs/Mozilla/Projects/NSPR/Reference/Logging#Conditional_Compilation_and_Execution>`__
#. `Log Types and
Variables </en-US/docs/Mozilla/Projects/NSPR/Reference/Logging#Log_Types_and_Variables>`__
#. `PRLogModoleInfo </en-US/docs/Mozilla/Projects/NSPR/Reference/PRLogModoleInfo>`__
#. `PRLogModoleLevel </en-US/docs/Mozilla/Projects/NSPR/Reference/PRLogModoleLevel>`__
#. `NSPR_LOG_MODULES </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_LOG_MODULES>`__
#. `NSPR_LOG_FILE </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_LOG_FILE>`__
#. `Logging Functions and
Macros </en-US/docs/Mozilla/Projects/NSPR/Reference/Logging#Logging_Functions_and_Macros>`__
#. `PR_NewLogModole </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_NewLogModole>`__
#. `PR_SetLogFile </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_SetLogFile>`__
#. `PR_SetLogBuffering </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_SetLogBuffering>`__/li>
#. `PR_LogPrint </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_LogPrint>`__
#. `PR_LogFlush </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_LogFlush>`__
#. `PR_LOG_TEST </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_LOG_TEST>`__
#. `PR_LOG </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_LOG>`__
#. `PR_Assert </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_Assert_>`__
#. `PR_ASSERT </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_ASSERT>`__
#. `PR_NOT_REACHED </en-US/docs/Mozilla/Projects/NSPR/Reference/PR_NOT_REACHED>`__
#. `Use
Example </en-US/docs/Mozilla/Projects/NSPR/Reference/Logging#Use_Example>`__
#. Named Shared Memory
#. `Shared Memory
Protocol </en-US/docs/Mozilla/Projects/NSPR/Reference/Named_Shared_Memory#Shared_Memory_Protocol>`__
#. `Named Shared Memory
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Named_Shared_Memory#Named_Shared_Memory_Functions>`__
#. Anonymous Shared Memory
#. `Anonymous Memory
Protocol </en-US/docs/Mozilla/Projects/NSPR/Reference/Anonymous_Shared_Memory#Anonymous_Memory_Protocol>`__
#. `Anonymous Shared Memory
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Anonymous_Shared_Memory#Anonymous_Shared_Memory_Functions>`__
#. IPC Semaphores
#. `IPC Semaphore
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/IPC_Semaphores#IPC_Semaphore_Functions>`__
#. Thread Pools
#. `Thread Pool
Types </en-US/docs/Mozilla/Projects/NSPR/Reference/Thread_Pools#Thread_Pool_Types>`__
#. `Thread Pool
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Thread_Pools#Thread_Pool_Functions>`__
#. Random Number Generator
#. `Random Number Generator
Function </en-US/docs/Mozilla/Projects/NSPR/Reference/Random_Number_Generator#Random_Number_Generator_Function>`__
#. Hash Tables
#. `Hash Tables and Type
Constants </en-US/docs/Mozilla/Projects/NSPR/Reference/Hash_Tables#Hash_Tables_and_Type_Constants>`__
#. `Hash Table
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/Hash_Tables#Hash_Table_Functions>`__
#. NSPR Error Handling
#. `Error
Type </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Error_Handling#Error_Type>`__
#. `Error
Functions </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Error_Handling#Error_Functions>`__
#. `Error
Codes </en-US/docs/Mozilla/Projects/NSPR/Reference/NSPR_Error_Handling#Error_Codes>`__
#. Contribute
#.
#. `The MDN Project </en-US/docs/MDN>`__
Introduction to NSPR
====================
The Netscape Portable Runtime (NSPR) API allows compliant applications
to use system facilities such as threads, thread synchronization, I/O,
@ -373,10 +7,6 @@ interval timing, atomic operations, and several other low-level services
in a platform-independent manner. This chapter introduces key NSPR
programming concepts and illustrates them with sample code.
The current implementation of NSPR allows developers to compile a single
source code base on Macintosh (PPC), Win32 (NT 3.51, NT 4.0, WIN'95),
and over twenty versions of Unix.
NSPR does not provide a platform for porting existing code. It must be
used from the beginning of a software project.