summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2019-10-03 13:23:48 +0200
committerantirez <antirez@gmail.com>2019-10-03 13:23:53 +0200
commit55a3da87f83c7c912b6c981a3e9fb1259179007a (patch)
treeab5bbf67861ec4a70575245315295d40af198992 /tests
parent45cd8e03cab6c24329c25cbb873405fe86911b5b (diff)
downloadredis-55a3da87f83c7c912b6c981a3e9fb1259179007a.tar.gz
Modules: RM_Replicate() test with threads.
Diffstat (limited to 'tests')
-rw-r--r--tests/modules/propagate.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/tests/modules/propagate.c b/tests/modules/propagate.c
index e08372dcf..fbd3ec359 100644
--- a/tests/modules/propagate.c
+++ b/tests/modules/propagate.c
@@ -39,6 +39,7 @@
#define REDISMODULE_EXPERIMENTAL_API
#include "redismodule.h"
+#include <pthread.h>
/* Timer callback. */
void timerHandler(RedisModuleCtx *ctx, void *data) {
@@ -47,12 +48,26 @@ void timerHandler(RedisModuleCtx *ctx, void *data) {
static int times = 0;
- printf("Fired!\n");
RedisModule_Replicate(ctx,"INCR","c","timer");
times++;
if (times < 10)
RedisModule_CreateTimer(ctx,100,timerHandler,NULL);
+ else
+ times = 0;
+}
+
+/* The thread entry point. */
+void *threadMain(void *arg) {
+ REDISMODULE_NOT_USED(arg);
+ RedisModuleCtx *ctx = RedisModule_GetThreadSafeContext(NULL);
+ for (int i = 0; i < 10; i++) {
+ RedisModule_ThreadSafeContextLock(ctx);
+ RedisModule_Replicate(ctx,"INCR","c","thread");
+ RedisModule_ThreadSafeContextUnlock(ctx);
+ }
+ RedisModule_FreeThreadSafeContext(ctx);
+ return NULL;
}
int propagateTestCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc)
@@ -60,7 +75,13 @@ int propagateTestCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc
REDISMODULE_NOT_USED(argv);
REDISMODULE_NOT_USED(argc);
- RedisModuleTimerID tid = RedisModule_CreateTimer(ctx,100,timerHandler,NULL);
+ RedisModuleTimerID timer_id =
+ RedisModule_CreateTimer(ctx,100,timerHandler,NULL);
+ REDISMODULE_NOT_USED(timer_id);
+
+ pthread_t tid;
+ if (pthread_create(&tid,NULL,threadMain,NULL) != 0)
+ return RedisModule_ReplyWithError(ctx,"-ERR Can't start thread");
REDISMODULE_NOT_USED(tid);
RedisModule_ReplyWithSimpleString(ctx,"OK");