Skip to content

Commit 121bd90

Browse files
committed
mod_heartmonitor: check grab() before put() in hm_slotmem_update_stat
1 parent 34be9c1 commit 121bd90

3 files changed

Lines changed: 11 additions & 2 deletions

File tree

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
*) mod_heartmonitor: Don't overwrite another server's slot when a new
2+
server sends heartbeats after HeartbeatMaxServers slots are in use.
3+
[arshiya tabasum <arshi bugqore.com>]

‎docs/log-message-tags/next-number‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
10633
1+
10634

‎modules/cluster/mod_heartmonitor.c‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,13 @@ static apr_status_t hm_slotmem_update_stat(hm_server_t *s, apr_pool_t *pool)
208208
hmserver.ready = s->ready;
209209
hmserver.seen = s->seen;
210210
/* XXX locking for grab() / put() */
211-
storage->grab(slotmem, &i);
211+
if (storage->grab(slotmem, &i) != APR_SUCCESS) {
212+
/* No free slot: don't let put() overwrite another server */
213+
ap_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL, APLOGNO(10633)
214+
"no free slot for %s, increase HeartbeatMaxServers",
215+
s->ip);
216+
return APR_SUCCESS;
217+
}
212218
hmserver.id = i;
213219
storage->put(slotmem, i, (unsigned char *)&hmserver, sizeof(hmserver));
214220
}

0 commit comments

Comments
 (0)