I started seeing the following errors in the specweb99 run output, when I use mod_specweb99.c with Apache 2.0.43 and worker MPM. The following patch seems to get rid of the problem. If you're thinking that it may degrade the response - I did not find much difference though.
Can somebody please evaluate and let me know if it's okay ?. ---------------------------------------------------------------- ERRORS FOUND Iteration 3: out of order entry in log Errorseen: 0, lastseen= 3694 Count: 3694, num= 6 Iteration 3: Number of POST requests in log inconsistant Reference_count = 238213, real_count = 239179 ----------------------------------------------------------------- Thanks -Madhu Index: mod_specweb99.c =================================================================== RCS file: /home/cvspublic/httpd-test/specweb99/specweb99-2.0/mod_specweb99.c,v retrieving revision 1.16 diff -u -r1.16 mod_specweb99.c --- mod_specweb99.c 31 Oct 2002 19:39:04 -0000 1.16 +++ mod_specweb99.c 11 Dec 2002 05:30:12 -0000 @@ -83,6 +83,10 @@ #include <unistd.h> #endif +#if APR_HAS_THREADS +apr_thread_mutex_t *log_mutex; +#endif + /* Note: version must be of the x.yy type - as it is * send over the http protocol wire; where x and y * are single 0-9 ascii digits :-). The name should @@ -600,6 +604,10 @@ if (apr_pool_create(&(_my->cad_pool), p) != APR_SUCCESS) exit(APEXIT_CHILDFATAL); +#if APR_HAS_THREADS + apr_thread_mutex_create(&log_mutex, APR_THREAD_MUTEX_DEFAULT, p); +#endif + if (s->next) { fprintf(stderr, "WARNING- this specweb module currently does not support vhosts/services\n" @@ -1175,8 +1183,15 @@ return HTTP_INTERNAL_SERVER_ERROR; } - if ((rv = _wlock(r->server, r, f, _my->log_path)) != APR_SUCCESS) +#if APR_HAS_THREADS + apr_thread_mutex_lock(log_mutex); +#endif + if ((rv = _wlock(r->server, r, f, _my->log_path)) != APR_SUCCESS) { +#if APR_HAS_THREADS + apr_thread_mutex_unlock(log_mutex); +#endif returnHTMLPageWithMessage(r, "Failed to lock post.log file"); + } else { char *msg = _log_and_write(r, f, filename, urlroot, dirnum, classnum, filenum, @@ -1184,6 +1199,9 @@ if (msg) { rv = APR_OS_START_USEERR; ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, msg); +#if APR_HAS_THREADS + apr_thread_mutex_unlock(log_mutex); +#endif returnHTMLPageWithMessage(r, msg); } } @@ -1193,10 +1211,16 @@ rv = rv2; ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server, "Failed to unlock %s", filename ? filename : ""); +#if APR_HAS_THREADS + apr_thread_mutex_unlock(log_mutex); +#endif returnHTMLPageWithMessage(r, "Failed to lock unpost.log file"); } } +#if APR_HAS_THREADS + apr_thread_mutex_unlock(log_mutex); +#endif apr_file_close(f); if (rv != APR_SUCCESS)