Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Potential deadlock in GDALAllRegister() #1108

Closed
artemp opened this issue Nov 20, 2018 · 3 comments
Closed

Potential deadlock in GDALAllRegister() #1108

artemp opened this issue Nov 20, 2018 · 3 comments
Assignees

Comments

@artemp
Copy link

artemp commented Nov 20, 2018

Potential deadlock in GDALAllRegister()

WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=9528)

This can be a "red herring" as sanitizer might not understanding code correctly ^

Steps to reproduce the problem.

#include <iostream>
#include <gdal_version.h>
#include <gdal_priv.h>
int main()
{
    std::cerr << "GDAL" << std::endl;
    GDALAllRegister();
    std::cerr << "Done" << std::endl;
    return 0;
}
"g++"   -fPIC -O0 -fno-inline -Wall -g -fsanitize=thread -fno-omit-frame-pointer   -I"$(GDAL_DIR)/include" -c -o "bin/gcc-8.2.0/debug/main.o" "main.cpp"

"g++" -L"$(GDAL_DIR)/lib" -Wl,-rpath -Wl,"$(GDAL_DIR)/lib" -Wl,-rpath-link -Wl,"$(GDAL_DIR)/lib" -o "bin/gcc-8.2.0/debug/gdal-bug" -Wl,--start-group "bin/gcc-8.2.0/debug/main.o"  -Wl,-Bstatic  -Wl,-Bdynamic -lgdal -Wl,--end-group -fPIC -g -fsanitize=thread

Output:

export TSAN_OPTIONS="second_deadlock_stack=1
./bin/gcc-8.2.0/debug/gdal-bug
GDAL
==================
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=9528)
  Cycle in lock order graph: M55 (0x7fd0aec1d998) => M56 (0x7b1000000000) => M55

  Mutex M56 acquired here while holding mutex M55 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x4016b)
    #1 CPLAcquireMutex /home/artem/projects/gdal/gdal/port/cpl_multiproc.cpp:1604 (libgdal.so.20+0xb9aeb3)
    #2 CPLCreateMutexInternal(bool, int) /home/artem/projects/gdal/gdal/port/cpl_multiproc.cpp:1581 (libgdal.so.20+0xb9aeb3)
    #3 __libc_start_main <null> (libc.so.6+0x2409a)

  Mutex M55 previously acquired by the same thread here:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x4016b)
    #1 CPLCreateOrAcquireMutexEx /home/artem/projects/gdal/gdal/port/cpl_multiproc.cpp:1418 (libgdal.so.20+0xb9aa64)
    #2 __libc_start_main <null> (libc.so.6+0x2409a)

  Mutex M55 acquired here while holding mutex M56 in main thread:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x4016b)
    #1 CPLCreateOrAcquireMutexEx /home/artem/projects/gdal/gdal/port/cpl_multiproc.cpp:1418 (libgdal.so.20+0xb9aa64)
    #2 __libc_start_main <null> (libc.so.6+0x2409a)

  Mutex M56 previously acquired by the same thread here:
    #0 pthread_mutex_lock <null> (libtsan.so.0+0x4016b)
    #1 CPLAcquireMutex /home/artem/projects/gdal/gdal/port/cpl_multiproc.cpp:1604 (libgdal.so.20+0xb9aeb3)
    #2 CPLCreateMutexInternal(bool, int) /home/artem/projects/gdal/gdal/port/cpl_multiproc.cpp:1581 (libgdal.so.20+0xb9aeb3)
    #3 __libc_start_main <null> (libc.so.6+0x2409a)

SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) (/usr/lib/x86_64-linux-gnu/libtsan.so.0+0x4016b) in pthread_mutex_lock
==================
Done
ThreadSanitizer: reported 1 warnings

Operating system

Ubuntu 18.10 64 bit

GDAL version and provenance

[master]

@magnus-grandin
Copy link

Has this problem been addressed? I just ran into the same issue, reproduced with both clang and gcc thread sanitizers. I am using libgdal 3.5.1 (via opencv), on Ubuntu 22.10.

@lukasz-ziobron-tpl
Copy link

I also have the same issue on Ubuntu 22.04.3 LTS.

Run cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release .
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenCV: /usr (found version "4.6.0")
-- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.74.0/BoostConfig.cmake (found version "1.74.0") found components: program_options
-- Found GTest: /usr/lib/x86_64-linux-gnu/cmake/GTest/GTestConfig.cmake (found version "1.12.1")
-- Build spdlog: 1.11.0
-- Found Threads: TRUE
-- Build type: Release
-- Configuring done

There is no such issue for MacOS Ventura 13.4.1 (c) with Apple clang
Apple clang version 14.0.3 (clang-1403.0.22.14.1)
Target: arm64-apple-darwin22.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

@jlblancoc
Copy link

I confirm it's still an issue for Ubuntu 22.04.

@rouault rouault self-assigned this Feb 19, 2024
rouault added a commit to rouault/gdal that referenced this issue Feb 19, 2024
rouault added a commit to rouault/gdal that referenced this issue Feb 19, 2024
rouault added a commit to rouault/gdal that referenced this issue Feb 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants