.actualCall("pthread_create")
.returnIntValueOrDefault(0);
}
+
+int pthread_detach(pthread_t thread)
+{
+ (void)thread;
+
+ return mock()
+ .actualCall("pthread_detach")
+ .returnIntValueOrDefault(0);
+}
+
+pthread_t pthread_self(void)
+{
+ return mock()
+ .actualCall("pthread_self")
+ .returnIntValueOrDefault(UT_DUMMY_THREAD_ID);
+}
};
+void threadDetachedSuccess()
+{
+ mock().expectOneCall("pthread_detach")
+ .andReturnValue(0);
+}
+
void nKeysFoundMget(long keys)
{
for (long i = 0 ; i < keys ; i++) {
bca->argc = 2;
mock().ignoreOtherCalls();
+ threadDetachedSuccess();
mock().expectOneCall("RedisModule_ReplyWithArray")
.withParameter("len", (long)REDISMODULE_POSTPONED_ARRAY_LEN);
mock().expectOneCall("RedisModule_Call")
bca->argc = 2;
mock().ignoreOtherCalls();
+ threadDetachedSuccess();
mock().expectOneCall("RedisModule_ReplyWithArray")
.withParameter("len", (long)REDISMODULE_POSTPONED_ARRAY_LEN);
mock().expectOneCall("RedisModule_Call")
bca->argc = 2;
mock().ignoreOtherCalls();
+ threadDetachedSuccess();
mock().expectOneCall("RedisModule_ReplyWithArray")
.withParameter("len", (long)REDISMODULE_POSTPONED_ARRAY_LEN);
mock().expectOneCall("RedisModule_Call")
bca->argc = 2;
mock().ignoreOtherCalls();
+ threadDetachedSuccess();
mock().expectOneCall("RedisModule_ReplyWithArray")
.withParameter("len", (long)REDISMODULE_POSTPONED_ARRAY_LEN);
mock().expectOneCall("RedisModule_Call")
delete []redisStrVec;
}
+
+TEST(exstrings_nget, nget_noatomic_threadmain_thread_detached)
+{
+ RedisModuleCtx ctx;
+ RedisModuleBlockedClientArgs *bca = (RedisModuleBlockedClientArgs*)malloc(sizeof(RedisModuleBlockedClientArgs));
+ RedisModuleBlockedClient *bc = RedisModule_BlockClient(&ctx,NULL,NULL,NULL,0);
+ RedisModuleString ** redisStrVec = createRedisStrVec(2);
+
+ bca->bc = bc;
+ bca->argv = redisStrVec;
+ bca->argc = 2;
+
+ mock().ignoreOtherCalls();
+ threadDetachedSuccess();
+
+ NGet_NoAtomic_ThreadMain((void*)bca);
+
+ mock().checkExpectations();
+
+ delete []redisStrVec;
+}