You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by je...@apache.org on 2008/09/22 20:13:46 UTC
svn commit: r697920 - in /httpd/flood/trunk: CHANGES flood_config.h
flood_farm.c flood_report_relative_times.c
Author: jerenkrantz
Date: Mon Sep 22 11:13:46 2008
New Revision: 697920
URL: http://svn.apache.org/viewvc?rev=697920&view=rev
Log:
Protect relative times report output with a mutex to avoid overlap.
* flood_config.h
(config_t): Add thread mutex to config structure.
* flood_farm.c
(run_farm): Create thread mutex when we create farmers structure.
* flood_report_relative_times.c
(relative_report_t): New structure to hold pointer to a config.
(relative_times_report_init): Create report structure and stash config.
(relative_times_process_stats): Use thread mutex to lock printf calls.
* CHANGES: Update.
Modified:
httpd/flood/trunk/CHANGES
httpd/flood/trunk/flood_config.h
httpd/flood/trunk/flood_farm.c
httpd/flood/trunk/flood_report_relative_times.c
Modified: httpd/flood/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/flood/trunk/CHANGES?rev=697920&r1=697919&r2=697920&view=diff
==============================================================================
--- httpd/flood/trunk/CHANGES (original)
+++ httpd/flood/trunk/CHANGES Mon Sep 22 11:13:46 2008
@@ -1,5 +1,8 @@
Changes since 1.0:
+* Protect relative times report output with a mutex to avoid overlap.
+ [Justin Erenkrantz]
+
* Fix compilation error with newer gcc versions.
[Ohad Lutzky <ohad lutzky.net>]
Modified: httpd/flood/trunk/flood_config.h
URL: http://svn.apache.org/viewvc/httpd/flood/trunk/flood_config.h?rev=697920&r1=697919&r2=697920&view=diff
==============================================================================
--- httpd/flood/trunk/flood_config.h (original)
+++ httpd/flood/trunk/flood_config.h Mon Sep 22 11:13:46 2008
@@ -31,6 +31,9 @@
typedef struct {
apr_xml_doc *doc;
apr_pool_t *pool;
+#if APR_HAS_THREADS
+ apr_thread_mutex_t *mutex;
+#endif
} config_t;
/**
Modified: httpd/flood/trunk/flood_farm.c
URL: http://svn.apache.org/viewvc/httpd/flood/trunk/flood_farm.c?rev=697920&r1=697919&r2=697920&view=diff
==============================================================================
--- httpd/flood/trunk/flood_farm.c (original)
+++ httpd/flood/trunk/flood_farm.c Mon Sep 22 11:13:46 2008
@@ -231,6 +231,7 @@
#if APR_HAS_THREADS
farm->farmers = apr_pcalloc(pool,
sizeof(apr_thread_t*) * (usefarmer_count + 1));
+ apr_thread_mutex_create(&config->mutex, APR_THREAD_MUTEX_DEFAULT, pool);
#else
farm->farmers = apr_pcalloc(pool,
sizeof(apr_proc_t*) * (usefarmer_count + 1));
Modified: httpd/flood/trunk/flood_report_relative_times.c
URL: http://svn.apache.org/viewvc/httpd/flood/trunk/flood_report_relative_times.c?rev=697920&r1=697919&r2=697920&view=diff
==============================================================================
--- httpd/flood/trunk/flood_report_relative_times.c (original)
+++ httpd/flood/trunk/flood_report_relative_times.c Mon Sep 22 11:13:46 2008
@@ -28,9 +28,18 @@
extern apr_file_t *local_stdout;
extern apr_file_t *local_stderr;
+struct relative_report_t {
+ config_t *config;
+};
+typedef struct relative_report_t relative_report_t;
+
apr_status_t relative_times_report_init(report_t **report, config_t *config,
const char *profile_name, apr_pool_t *pool)
{
+ relative_report_t *rr = apr_palloc(pool, sizeof(relative_report_t));
+ rr->config = config;
+
+ *report = rr;
return APR_SUCCESS;
}
@@ -39,6 +48,7 @@
#define FLOOD_PRINT_BUF 256
apr_size_t buflen;
char buf[FLOOD_PRINT_BUF];
+ relative_report_t *rr = (relative_report_t*)report;
buflen = apr_snprintf(buf, FLOOD_PRINT_BUF,
"%" APR_INT64_T_FMT " %" APR_INT64_T_FMT
@@ -61,9 +71,10 @@
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(rr->config->mutex);
apr_file_printf(local_stdout, "%s %ld %s\n", buf, apr_os_thread_current(), req->uri);
+ apr_thread_mutex_unlock(rr->config->mutex);
#else
apr_file_printf(local_stdout, "%s %d %s\n", buf, getpid(), req->uri);
#endif