Closed
Bug 38599
Opened 25 years ago
Closed 25 years ago
Better implementation of PR_Poll on Unix
Categories
(NSPR :: NSPR, defect, P3)
Tracking
(Not tracked)
RESOLVED
FIXED
4.1
People
(Reporter: wtc, Assigned: wtc)
Details
On Unix, PR_Poll allocates a pollfd structure array from
the heap and frees it in each invocation. This is
inefficient. Two optimizations are possible.
1. Allocate a pollfd structure array on the stack and use
it if the number of poll descriptors is <= the size of this
array. This optimization is already implemented but we
only allocate an array of size 4, which is too small for
server applications. I suggest that we increase the size
of this array to 128. Since a pollfd structure is 8 bytes
(one int + two shorts), an array of 128 pollfd structures
is 1K bytes, which seems to be an appropriate maximum.
(NSPR's default thread stack size is 64K bytes.)
2. Make the malloc'ed pollfd structure array a thread-private
data. We can allocate this array in 128-element (1K-byte)
increments so that we don't call realloc() too often.
Assignee | ||
Updated•25 years ago
|
Target Milestone: --- → 4.1
Assignee | ||
Updated•25 years ago
|
Status: NEW → ASSIGNED
Assignee | ||
Comment 1•25 years ago
|
||
I checked in the following changes on the tip.
1. I increased the size of the stack pollfd structure array from
4 elements to 64 elements (512 bytes). I did not increase it
to 128 elements (1024 bytes) because I'm concerned about stack
overflow of threads with smaller than default stack size.
2. I made the malloc'ed pollfd structure array a thread private
data. I allocate the exact required size, as opposed to
some chunk size.
/cvsroot/mozilla/nsprpub/pr/include/private/primpl.h, revision 3.44
/cvsroot/mozilla/nsprpub/pr/src/pthreads/ptio.c, revision 3.57
/cvsroot/mozilla/nsprpub/pr/src/pthreads/ptthread.c, revision 3.35
Assignee | ||
Comment 2•25 years ago
|
||
I removed an extra semicolon in ptthread.c. Doh!
/cvsroot/mozilla/nsprpub/pr/src/pthreads/ptthread.c, revision 3.36
Added a new test prpollml.c. This test exercises the code that
allocates and frees the thread-private pollfd structure array.
I ran this test under Purify on Solaris 2.6 and verified that
there is no memory leak.
Marked the bug fixed.
Status: ASSIGNED → RESOLVED
Closed: 25 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•