You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
4.4 KiB
119 lines
4.4 KiB
Index: server/scoreboard.c |
|
=================================================================== |
|
--- a/server/scoreboard.c (revision 1610498) |
|
+++ b/server/scoreboard.c (revision 1610499) |
|
@@ -579,6 +579,21 @@ |
|
sbh->thread_num); |
|
} |
|
|
|
+AP_DECLARE(void) ap_copy_scoreboard_worker(worker_score *dest, |
|
+ int child_num, |
|
+ int thread_num) |
|
+{ |
|
+ worker_score *ws = ap_get_scoreboard_worker_from_indexes(child_num, thread_num); |
|
+ |
|
+ memcpy(dest, ws, sizeof *ws); |
|
+ |
|
+ /* For extra safety, NUL-terminate the strings returned, though it |
|
+ * should be true those last bytes are always zero anyway. */ |
|
+ dest->client[sizeof(dest->client) - 1] = '\0'; |
|
+ dest->request[sizeof(dest->request) - 1] = '\0'; |
|
+ dest->vhost[sizeof(dest->vhost) - 1] = '\0'; |
|
+} |
|
+ |
|
AP_DECLARE(process_score *) ap_get_scoreboard_process(int x) |
|
{ |
|
if ((x < 0) || (x >= server_limit)) { |
|
Index: modules/generators/mod_status.c |
|
=================================================================== |
|
--- a/modules/generators/mod_status.c (revision 1610498) |
|
+++ b/modules/generators/mod_status.c (revision 1610499) |
|
@@ -194,7 +194,7 @@ |
|
long req_time; |
|
int short_report; |
|
int no_table_report; |
|
- worker_score *ws_record; |
|
+ worker_score *ws_record = apr_palloc(r->pool, sizeof *ws_record); |
|
process_score *ps_record; |
|
char *stat_buffer; |
|
pid_t *pid_buffer, worker_pid; |
|
@@ -306,7 +306,7 @@ |
|
for (j = 0; j < thread_limit; ++j) { |
|
int indx = (i * thread_limit) + j; |
|
|
|
- ws_record = ap_get_scoreboard_worker_from_indexes(i, j); |
|
+ ap_copy_scoreboard_worker(ws_record, i, j); |
|
res = ws_record->status; |
|
|
|
if ((i >= max_servers || j >= threads_per_child) |
|
@@ -637,7 +637,7 @@ |
|
|
|
for (i = 0; i < server_limit; ++i) { |
|
for (j = 0; j < thread_limit; ++j) { |
|
- ws_record = ap_get_scoreboard_worker_from_indexes(i, j); |
|
+ ap_copy_scoreboard_worker(ws_record, i, j); |
|
|
|
if (ws_record->access_count == 0 && |
|
(ws_record->status == SERVER_READY || |
|
Index: modules/lua/lua_request.c |
|
=================================================================== |
|
--- a/modules/lua/lua_request.c (revision 1610498) |
|
+++ b/modules/lua/lua_request.c (revision 1610499) |
|
@@ -1245,16 +1245,22 @@ |
|
*/ |
|
static int lua_ap_scoreboard_worker(lua_State *L) |
|
{ |
|
- int i, |
|
- j; |
|
- worker_score *ws_record; |
|
+ int i, j; |
|
+ worker_score *ws_record = NULL; |
|
+ request_rec *r = NULL; |
|
|
|
luaL_checktype(L, 1, LUA_TUSERDATA); |
|
luaL_checktype(L, 2, LUA_TNUMBER); |
|
luaL_checktype(L, 3, LUA_TNUMBER); |
|
+ |
|
+ r = ap_lua_check_request_rec(L, 1); |
|
+ if (!r) return 0; |
|
+ |
|
i = lua_tointeger(L, 2); |
|
j = lua_tointeger(L, 3); |
|
- ws_record = ap_get_scoreboard_worker_from_indexes(i, j); |
|
+ ws_record = apr_palloc(r->pool, sizeof *ws_record); |
|
+ |
|
+ ap_copy_scoreboard_worker(ws_record, i, j); |
|
if (ws_record) { |
|
lua_newtable(L); |
|
|
|
Index: include/scoreboard.h |
|
=================================================================== |
|
--- a/include/scoreboard.h (revision 1610498) |
|
+++ b/include/scoreboard.h (revision 1610499) |
|
@@ -183,8 +183,25 @@ |
|
AP_DECLARE(void) ap_time_process_request(ap_sb_handle_t *sbh, int status); |
|
|
|
AP_DECLARE(worker_score *) ap_get_scoreboard_worker(ap_sb_handle_t *sbh); |
|
+ |
|
+/** Return a pointer to the worker_score for a given child, thread pair. |
|
+ * @param child_num The child number. |
|
+ * @param thread_num The thread number. |
|
+ * @return A pointer to the worker_score structure. |
|
+ * @deprecated This function is deprecated, use ap_copy_scoreboard_worker instead. */ |
|
AP_DECLARE(worker_score *) ap_get_scoreboard_worker_from_indexes(int child_num, |
|
int thread_num); |
|
+ |
|
+/** Copy the contents of a worker scoreboard entry. The contents of |
|
+ * the worker_score structure are copied verbatim into the dest |
|
+ * structure. |
|
+ * @param dest Output parameter. |
|
+ * @param child_num The child number. |
|
+ * @param thread_num The thread number. |
|
+ */ |
|
+AP_DECLARE(void) ap_copy_scoreboard_worker(worker_score *dest, |
|
+ int child_num, int thread_num); |
|
+ |
|
AP_DECLARE(process_score *) ap_get_scoreboard_process(int x); |
|
AP_DECLARE(global_score *) ap_get_scoreboard_global(void); |
|
|
|
|
|
|