Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
825adcf3
Commit
825adcf3
authored
Oct 31, 2019
by
antirez
Browse files
Modules: block on keys: finish implementing RM_UnblockClient().
parent
37bf3e18
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/module.c
View file @
825adcf3
...
@@ -4201,15 +4201,24 @@ int moduleClientIsBlockedOnKeys(client *c) {
...
@@ -4201,15 +4201,24 @@ int moduleClientIsBlockedOnKeys(client *c) {
* needs to be passed to the client, included but not limited some slow
* needs to be passed to the client, included but not limited some slow
* to compute reply or some reply obtained via networking.
* to compute reply or some reply obtained via networking.
*
*
* Note: this function can be called from threads spawned by the module.
* Note
1
: this function can be called from threads spawned by the module.
*
*
* Note: when we unblock a client that is blocked for keys using
* Note
2
: when we unblock a client that is blocked for keys using
* the API RedisModule_BlockClientOnKeys(), the privdata argument here is
* the API RedisModule_BlockClientOnKeys(), the privdata argument here is
* not used, and the reply callback is called with the privdata pointer that
* not used, and the reply callback is called with the privdata pointer that
* was passed when blocking the client. Also note if you unblock clients
* was passed when blocking the client.
* blocked on keys in this way, the reply callback should be ready to handle
*
* the fact the key may not be ready at all. */
* Unblocking a client that was blocked for keys using this API will still
* require the client to get some reply, so the function will use the
* "timeout" handler in order to do so. */
int
RM_UnblockClient
(
RedisModuleBlockedClient
*
bc
,
void
*
privdata
)
{
int
RM_UnblockClient
(
RedisModuleBlockedClient
*
bc
,
void
*
privdata
)
{
if
(
bc
->
blocked_on_keys
)
{
/* In theory the user should always pass the timeout handler as an
* argument, but better to be safe than sorry. */
if
(
bc
->
timeout_callback
==
NULL
)
return
REDISMODULE_ERR
;
if
(
bc
->
unblocked
)
return
REDISMODULE_OK
;
if
(
bc
->
client
)
moduleBlockedClientTimedOut
(
bc
->
client
);
}
moduleUnblockClientByHandle
(
bc
,
privdata
);
moduleUnblockClientByHandle
(
bc
,
privdata
);
return
REDISMODULE_OK
;
return
REDISMODULE_OK
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment