This involves an API semantics change, so I'm posting it
for comments before committing...
The idea here is to skip the mutex locking for buffered
file reads and writes unless the file has been created with
APR_XTHREAD. This fixes a bit of bogusness in the httpd,
where we do a huge number of mutex lock/unlock cycles when
reading the config file--which is only accessed by a single
thread.
--Brian
Index: file_io/unix/readwrite.c
===================================================================
RCS file: /home/cvs/apr/file_io/unix/readwrite.c,v
retrieving revision 1.75
diff -u -r1.75 readwrite.c
--- file_io/unix/readwrite.c 18 Feb 2002 06:08:53 -0000 1.75
+++ file_io/unix/readwrite.c 10 Mar 2002 05:33:53 -0000
@@ -118,7 +118,9 @@
apr_uint64_t size = *nbytes;
#if APR_HAS_THREADS
- apr_thread_mutex_lock(thefile->thlock);
+ if (thefile->flags & APR_XTHREAD) {
+ apr_thread_mutex_lock(thefile->thlock);
+ }
#endif
if (thefile->direction == 1) {
@@ -164,7 +166,9 @@
rv = 0;
}
#if APR_HAS_THREADS
- apr_thread_mutex_unlock(thefile->thlock);
+ if (thefile->flags & APR_XTHREAD) {
+ apr_thread_mutex_unlock(thefile->thlock);
+ }
#endif
return rv;
}
@@ -223,7 +227,9 @@
int size = *nbytes;
#if APR_HAS_THREADS
- apr_thread_mutex_lock(thefile->thlock);
+ if (thefile->flags & APR_XTHREAD) {
+ apr_thread_mutex_lock(thefile->thlock);
+ }
#endif
if ( thefile->direction == 0 ) {
@@ -251,7 +257,9 @@
}
#if APR_HAS_THREADS
- apr_thread_mutex_unlock(thefile->thlock);
+ if (thefile->flags & APR_XTHREAD) {
+ apr_thread_mutex_unlock(thefile->thlock);
+ }
#endif
return rv;
}