From 55a3da87f83c7c912b6c981a3e9fb1259179007a Mon Sep 17 00:00:00 2001 From: antirez Date: Thu, 3 Oct 2019 13:23:48 +0200 Subject: Modules: RM_Replicate() test with threads. --- tests/modules/propagate.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'tests') 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 /* 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"); -- cgit v1.2.1