Cylix / cpp_redis

C++11 Lightweight Redis client: async, thread-safe, no dependency, pipelining, multi-platform - NO LONGER MAINTAINED - Please check https://github.com/cpp-redis/cpp_redis
MIT License
1.25k stars 554 forks source link

Sample client deadlocks using vcpkg and Visual Studio 2017 #184

Open unclevlad opened 6 years ago

unclevlad commented 6 years ago

We've heard nothing but good things about this library, so when we needed a Windows client for redis and saw this was supported by vcpkg, we jumped at the chance to use it.

And we were stopped dead in our tracks at the proof-of-concept phase. As every single example that actually tries to communicate with redis deadlocks. (The logger example works just fine,)

Steps to reproduce minimal example:

  1. Install cpp_redis in vcpkg
  2. Create brand new solution in VS 2017 - Windows console application - Debug - 64bit
  3. Gut all the precompiled header stuff
  4. Cut and paste https://github.com/Cylix/cpp_redis/blob/master/examples/cpp_redis_client.cpp
  5. Build and run
  6. Watch the deadlock in tacopie::io_service::thread_pool::stop( ) line 85
unclevlad commented 6 years ago

We have tried:

Increasing the number of workers via cpp_redis::network::set_default_nb_workers - No impact

Call client.disconnect( false ) - Throws an exception "Microsoft C++ exception: tacopie::tacopie_error at memory location 0x007FF318."

Call client.disconnect( true ) - Changes location of hang to tacopie::io_service::wait_for_removal line 348

unclevlad commented 6 years ago

During more testing and debugging, we encountered several sparadic, but inconsistent, instances of

f:\dd\vctools\crt\crtw32\stdcpp\thr\mutex.c(51): mutex destroyed while busy

which is mentioned in at least one other open issue.

unclevlad commented 6 years ago

This appears to be an issue with the version deployed via vcpkg. I cloned the current repository, built it, and the examples work.

Cylix commented 6 years ago

Hi,

Sorry for the delayed response. This library does not officially support the vcpkg package, so I am not sure how cpp_redis is available on it, and thus which version is packaged.

I will keep the issue opened though: seems this is not the first time someone request cpp_redis to be available on vcpkg, so better officially support it than leaving a malfunctioned unofficial package out there.

Best

unclevlad commented 6 years ago

Thank you for the response.

If there is anything I can do to support an official vcpkg, please let me know.