diff options
author | antirez <antirez@gmail.com> | 2019-10-03 13:23:48 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2019-10-03 13:23:53 +0200 |
commit | 55a3da87f83c7c912b6c981a3e9fb1259179007a (patch) | |
tree | ab5bbf67861ec4a70575245315295d40af198992 /tests | |
parent | 45cd8e03cab6c24329c25cbb873405fe86911b5b (diff) | |
download | redis-55a3da87f83c7c912b6c981a3e9fb1259179007a.tar.gz |
Modules: RM_Replicate() test with threads.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/modules/propagate.c | 25 |
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"); |