https://issues.apache.org/bugzilla/show_bug.cgi?id=40592
Kurt <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Attachment #18902|*local_stdour |*local_stderr; filename| | --- Comment #4 from Kurt <[email protected]> --- Comment on attachment 18902 --> https://issues.apache.org/bugzilla/attachment.cgi?id=18902 Unsuccessful attempt to fix this >An unsuccessful attempt to fix output corruption in >flood's <report>relative_times</report>. > >Index: flood_report_relative_times.c >=================================================================== >--- flood_report_relative_times.c (revision 449338) >+++ flood_report_relative_times.c (working copy) >@@ -27,10 +27,20 @@ > extern apr_file_t *local_stdout; > extern apr_file_t *local_stderr; > >+struct relative_times { >+ apr_thread_mutex_t *mutex; >+}; >+ > apr_status_t relative_times_report_init(report_t **report, config_t *config, > const char *profile_name, apr_pool_t *pool) > { >- return APR_SUCCESS; >+ struct relative_times *me; >+ me = apr_palloc(pool, sizeof(struct relative_times)); >+ if (me == NULL) { >+ return APR_ENOMEM; >+ } >+ *report = me; >+ return apr_thread_mutex_create(&me->mutex, APR_THREAD_MUTEX_DEFAULT, >pool); > } > > apr_status_t relative_times_process_stats(report_t *report, int verified, > request_t *req, response_t *resp, flood_timer_t *timer) >@@ -38,6 +48,7 @@ > #define FLOOD_PRINT_BUF 256 > apr_size_t buflen; > char buf[FLOOD_PRINT_BUF]; >+ struct relative_times *me = report; > > buflen = apr_snprintf(buf, FLOOD_PRINT_BUF, > "%" APR_INT64_T_FMT " %" APR_INT64_T_FMT >@@ -60,10 +71,15 @@ > apr_snprintf(buf+buflen, FLOOD_PRINT_BUF-buflen, " %d ", verified); > } > >- /* FIXME: this call may need to be in a critical section */ > #if APR_HAS_THREADS >+ apr_thread_mutex_lock(me->mutex); >+ apr_file_lock(local_stdout, APR_FLOCK_EXCLUSIVE); > apr_file_printf(local_stdout, "%s %ld %s\n", buf, > apr_os_thread_current(), req->uri); >+ apr_file_flush(local_stdout); >+ apr_file_unlock(local_stdout); >+ apr_thread_mutex_unlock(me->mutex); > #else >+#error no threads? > apr_file_printf(local_stdout, "%s %d %s\n", buf, getpid(), req->uri); > #endif > >@@ -77,5 +93,7 @@ > > apr_status_t relative_times_destroy_report(report_t *report) > { >+ struct relative_times *me = report; >+ apr_thread_mutex_destroy(me->mutex); > return APR_SUCCESS; > } -- You are receiving this mail because: You are the assignee for the bug. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
