Sounds reasonable. Make sure to update the documentation and at least take a 
shot at
changing all the other platforms. If you break something, it will get fixed. It 
is more
important to get the semantics the same everywhere...

Bill


> 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;
>      }
>
>

Reply via email to