Skip to content

Commit a91f58b

Browse files
committed
Fix potential race in pubsub
1 parent 3013799 commit a91f58b

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/pubsub.cpp

+8-4
Original file line numberDiff line numberDiff line change
@@ -301,9 +301,11 @@ int pubsubPublishMessage(robj *channel, robj *message) {
301301
client *c = reinterpret_cast<client*>(ln->value);
302302
if (c->flags & CLIENT_CLOSE_ASAP) // avoid blocking if the write will be ignored
303303
continue;
304-
fastlock_lock(&c->lock);
304+
if (FCorrectThread(c))
305+
fastlock_lock(&c->lock);
305306
addReplyPubsubMessage(c,channel,message);
306-
fastlock_unlock(&c->lock);
307+
if (FCorrectThread(c))
308+
fastlock_unlock(&c->lock);
307309
receivers++;
308310
}
309311
}
@@ -321,10 +323,12 @@ int pubsubPublishMessage(robj *channel, robj *message) {
321323
{
322324
if (pat->pclient->flags & CLIENT_CLOSE_ASAP)
323325
continue;
324-
fastlock_lock(&pat->pclient->lock);
326+
if (FCorrectThread(pat->pclient))
327+
fastlock_lock(&pat->pclient->lock);
325328
addReplyPubsubPatMessage(pat->pclient,
326329
pat->pattern,channel,message);
327-
fastlock_unlock(&pat->pclient->lock);
330+
if (FCorrectThread(pat->pclient))
331+
fastlock_unlock(&pat->pclient->lock);
328332
receivers++;
329333
}
330334
}

0 commit comments

Comments
 (0)