mirror of
http://github.com/valkey-io/valkey
synced 2024-11-22 00:52:38 +00:00
Modules: fix thread safe context DB selection.
Before this fix the DB currenty selected by the client blocked was not respected and operations were always performed on DB 0.
This commit is contained in:
parent
b73f186aac
commit
c29852ffd2
@ -206,6 +206,7 @@ typedef struct RedisModuleBlockedClient {
|
||||
RedisModule_UnblockClient() API. */
|
||||
client *reply_client; /* Fake client used to accumulate replies
|
||||
in thread safe contexts. */
|
||||
int dbid; /* Database number selected by the original client. */
|
||||
} RedisModuleBlockedClient;
|
||||
|
||||
static pthread_mutex_t moduleUnblockedClientsMutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
@ -3339,6 +3340,7 @@ RedisModuleBlockedClient *RM_BlockClient(RedisModuleCtx *ctx, RedisModuleCmdFunc
|
||||
bc->privdata = NULL;
|
||||
bc->reply_client = createClient(-1);
|
||||
bc->reply_client->flags |= CLIENT_MODULE;
|
||||
bc->dbid = c->db->id;
|
||||
c->bpop.timeout = timeout_ms ? (mstime()+timeout_ms) : 0;
|
||||
|
||||
blockClient(c,BLOCKED_MODULE);
|
||||
@ -3524,6 +3526,7 @@ RedisModuleCtx *RM_GetThreadSafeContext(RedisModuleBlockedClient *bc) {
|
||||
* in order to keep things like the currently selected database and similar
|
||||
* things. */
|
||||
ctx->client = createClient(-1);
|
||||
if (bc) selectDb(ctx->client,bc->dbid);
|
||||
return ctx;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user