Как отменить операцию блокировки hiredis

Запуск блокирующей подписки, как показано ниже, останавливает программу на redisGetReply (источник: hiredis # конвейерная)

void subscribe (std::string& key, Subscriber* subscriber)
{
void* reply = redisCommand (redis, "SUBSCRIBE %s", key.c_str ());
freeReplyObject (reply);
while (redisGetReply (redis, &reply) == REDIS_OK)
{
subscriber -> notify ();
freeReplyObject (reply);
}
}

Я думал, что, призывая redisFree (через обработку сигнала) сокет будет закрыт и redisGetReply вернулся, как упоминалось в hiredis # чистящих вверх, вместо этого он вызывает нарушение доступа к памяти.

-2

Решение

Хорошо, ничего страшного. Мне удалось просто закрыть дескриптор файла, который используется hiredis, вызвав …

close (redis -> fd);

… а также redisGetReply возвращается правильно.

Кроме того, можно отправить QUIT команда и блокировка подписки возвращается.

0

Другие решения


По вопросам рекламы [email protected]