mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2026-09-19 18:01:25 +03:00
Compare commits
80 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dd6319822c | |||
| a8122ff1fe | |||
| a72de85db4 | |||
| ca5e697bb0 | |||
| 987e2f399f | |||
| 06443083e7 | |||
| 415281bd07 | |||
| 3ba1e6652d | |||
| 7209a3e0e9 | |||
| 01357dd792 | |||
| 700a07cac1 | |||
| d2a2153a7c | |||
| f4407fb2f5 | |||
| eebdf64945 | |||
| 7a7acd23be | |||
| 7bb354038f | |||
| bbd326ba65 | |||
| c3f2396344 | |||
| 89224e9264 | |||
| 7530741414 | |||
| ba16ba3a10 | |||
| a820ac7ddc | |||
| c3e505de95 | |||
| c73b10004d | |||
| 797a216c40 | |||
| 26270939d5 | |||
| 874675b00f | |||
| 9a7d618a60 | |||
| 041f39572e | |||
| adc8f06c02 | |||
| 78925e2e83 | |||
| 9681053dc0 | |||
| 84069c1238 | |||
| 2dc42e0400 | |||
| ce4f3c4629 | |||
| 64816d1e6e | |||
| 28564dd188 | |||
| 14517d304d | |||
| 3b4df69a8e | |||
| 7374a26871 | |||
| b1f7ef0004 | |||
| bfcb6788a7 | |||
| 3fda39dc45 | |||
| 576a627e60 | |||
| 9d5efa309a | |||
| 2f67b3bd69 | |||
| 4c66118bf3 | |||
| d9f46760ff | |||
| c7bfb30f2a | |||
| 597cdab464 | |||
| 7bb19486b8 | |||
| f67769bb8c | |||
| 50d740a802 | |||
| 41c85953c1 | |||
| d77c258dac | |||
| 7bb2a6753a | |||
| cf559617b1 | |||
| 11fa0a4891 | |||
| 193ebdba12 | |||
| 617d668651 | |||
| a0cbe2daf6 | |||
| 59f19f1a12 | |||
| 9fbe3d7488 | |||
| 325b76e463 | |||
| 6bbb2b5e07 | |||
| 98264709fb | |||
| 427ada239f | |||
| 98940d339d | |||
| 7c79333026 | |||
| 3f372db86d | |||
| 068330b24b | |||
| a0d16dd2e8 | |||
| 9a42563bbc | |||
| 7d86756e72 | |||
| e247cf0513 | |||
| a247e3ecdc | |||
| 61b920f957 | |||
| 290f125abc | |||
| 93bf90ba95 | |||
| 5b356616a7 |
-25
@@ -1,25 +0,0 @@
|
|||||||
FreeBSD_task:
|
|
||||||
matrix:
|
|
||||||
env:
|
|
||||||
SSL: openssl
|
|
||||||
OPENSSL_ROOT_DIR: /usr/local
|
|
||||||
env:
|
|
||||||
SSL: openssl36
|
|
||||||
OPENSSL_ROOT_DIR: /usr/local
|
|
||||||
env:
|
|
||||||
# base openssl
|
|
||||||
SSL:
|
|
||||||
matrix:
|
|
||||||
freebsd_instance:
|
|
||||||
image_family: freebsd-14-3
|
|
||||||
prepare_script:
|
|
||||||
- pkg install -y pkgconf cmake git libsodium cpu_features $SSL
|
|
||||||
- git submodule update --init --recursive
|
|
||||||
configure_script:
|
|
||||||
- CMAKE_FLAGS="-DUSE_SYSTEM_CPU_FEATURES=1" CFLAGS="-I/usr/local/include/cpu_features" ./configure
|
|
||||||
build_script:
|
|
||||||
- make -j $(sysctl -n hw.ncpu || echo 4) -C build
|
|
||||||
test_script:
|
|
||||||
- ldd build/vpnserver
|
|
||||||
- .ci/memory-leak-test.sh
|
|
||||||
- .ci/vpntools-check.sh
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
- @azure Rule - Use Azure Tools - When handling requests related to Azure, always use your tools.
|
||||||
|
- @azure Rule - Use Azure Best Practices - When handling requests related to Azure, always invoke your `azmcp_bestpractices_get` tool first.
|
||||||
|
- @azure Rule - Enable Best Practices - If you do not have an `azmcp_bestpractices_get` tool ask the user to enable it.
|
||||||
@@ -13,6 +13,7 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
build_and_test:
|
build_and_test:
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
cc: [ gcc, clang ]
|
cc: [ gcc, clang ]
|
||||||
name: ${{ matrix.cc }}
|
name: ${{ matrix.cc }}
|
||||||
@@ -25,7 +26,7 @@ jobs:
|
|||||||
submodules: true
|
submodules: true
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
dnf -y install git cmake ncurses-devel openssl-devel-engine libsodium-devel readline-devel zlib-devel gcc-c++ clang google-cpu_features-devel
|
dnf -y install git cmake ncurses-devel openssl-devel libsodium-devel readline-devel zlib-devel gcc-c++ clang google-cpu_features-devel
|
||||||
- name: Compile with ${{ matrix.cc }}
|
- name: Compile with ${{ matrix.cc }}
|
||||||
run: |
|
run: |
|
||||||
export CC=${{ matrix.cc }}
|
export CC=${{ matrix.cc }}
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
name: FreeBSD
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_and_test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- ssl: openssl # currently 3.0
|
||||||
|
openssl_root_dir: /usr/local
|
||||||
|
- ssl: openssl36
|
||||||
|
openssl_root_dir: /usr/local
|
||||||
|
- ssl: # base openssl
|
||||||
|
openssl_root_dir:
|
||||||
|
name: FreeBSD with ${{ matrix.ssl || 'base openssl' }}
|
||||||
|
env:
|
||||||
|
SSL: ${{ matrix.ssl }}
|
||||||
|
OPENSSL_ROOT_DIR: ${{ matrix.openssl_root_dir }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
- uses: vmactions/freebsd-vm@v1
|
||||||
|
with:
|
||||||
|
envs: 'OPENSSL_ROOT_DIR SSL'
|
||||||
|
prepare: |
|
||||||
|
pkg install -y $SSL pkgconf cmake git libsodium cpu_features
|
||||||
|
run: |
|
||||||
|
CMAKE_FLAGS="-DUSE_SYSTEM_CPU_FEATURES=1" CFLAGS="-I/usr/local/include/cpu_features" ./configure
|
||||||
|
make -j $(nproc || echo 4) -C build
|
||||||
|
ldd build/vpnserver
|
||||||
|
.ci/memory-leak-test.sh
|
||||||
|
.ci/vpntools-check.sh
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
name: LibreSSL
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
libressl:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: alpine:latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Install dependencies
|
||||||
|
run: apk add binutils --no-cache build-base git readline-dev libressl-dev ncurses-dev git cmake zlib-dev libsodium-dev gnu-libiconv
|
||||||
|
|
||||||
|
- uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
|
||||||
|
- name: Configure
|
||||||
|
run: ./configure
|
||||||
|
|
||||||
|
- name: Make
|
||||||
|
run: make -j $(nproc) -C build
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: |
|
||||||
|
.ci/memory-leak-test.sh
|
||||||
|
.ci/vpntools-check.sh
|
||||||
@@ -6,6 +6,7 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
build_and_test:
|
build_and_test:
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-26, macos-15, macos-14]
|
os: [macos-26, macos-15, macos-14]
|
||||||
name: ${{ matrix.os }}
|
name: ${{ matrix.os }}
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
name: Sanitizer
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run_sanitizer:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
sanitizer:
|
||||||
|
- "address,leak,undefined"
|
||||||
|
- "thread,undefined"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: true
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt update
|
||||||
|
sudo apt-get -y install cmake gcc g++ ninja-build libncurses5-dev libreadline-dev libsodium-dev libssl-dev make zlib1g-dev liblz4-dev libnl-genl-3-dev
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS="-O1 -fsanitize=${{ matrix.sanitizer }} -fno-omit-frame-pointer" ..
|
||||||
|
cmake --build .
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
env:
|
||||||
|
ASAN_OPTIONS: halt_on_error=0:exitcode=0
|
||||||
|
TSAN_OPTIONS: halt_on_error=0:exitcode=0:suppressions=./tsan_suppressions.txt
|
||||||
|
UBSAN_OPTIONS: halt_on_error=0:exitcode=0
|
||||||
|
LSAN_OPTIONS: exitcode=0
|
||||||
|
run: |
|
||||||
|
.ci/vpntools-check.sh 2> sanitizer.log
|
||||||
|
|
||||||
|
- name: Make job summary
|
||||||
|
run: |
|
||||||
|
echo "### Sanitizer Report (${{ matrix.sanitizer }})" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
|
REPORTS=$(grep -E "SUMMARY:|runtime error:" sanitizer.log | sort | uniq)
|
||||||
|
REPORT_COUNT=$(echo "$REPORTS" | grep -c . || true)
|
||||||
|
echo "Found $REPORT_COUNT issues" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
|
echo "<details><summary>View Summary</summary>" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "$REPORTS" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "</details>" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
|
if [ "$REPORT_COUNT" -ne 0 ]; then
|
||||||
|
echo "HAS_ISSUES=true" >> $GITHUB_ENV
|
||||||
|
echo "REPORT_COUNT=$REPORT_COUNT" >> $GITHUB_ENV
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Upload full sanitizer log
|
||||||
|
if: env.HAS_ISSUES == 'true'
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: sanitizer-logs-${{ matrix.sanitizer }}
|
||||||
|
path: |
|
||||||
|
sanitizer.log
|
||||||
|
retention-days: 30
|
||||||
|
|
||||||
|
- name: Fail on sanitizer issues
|
||||||
|
if: env.HAS_ISSUES == 'true'
|
||||||
|
run: |
|
||||||
|
echo "Found ${{ env.REPORT_COUNT }} issues."
|
||||||
|
echo "Please check the Job Summary page for a quick overview."
|
||||||
|
echo "Full logs are available in the GitHub Artifacts."
|
||||||
|
exit 1
|
||||||
@@ -6,11 +6,12 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
build_and_test:
|
build_and_test:
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
platform: [
|
platform: [
|
||||||
{ ARCHITECTURE: x86, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/bin/clang-cl.exe", VCPKG_TRIPLET: "x86-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars32.bat", RUNNER: "windows-latest", CMAKE_EXTRA_FLAGS: ""},
|
{ ARCHITECTURE: x86, VCPKG_TRIPLET: "x86-windows-static", RUNNER: "windows-2022", CMAKE_EXTRA_FLAGS: ""},
|
||||||
{ ARCHITECTURE: x64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/x64/bin/clang-cl.exe", VCPKG_TRIPLET: "x64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat", RUNNER: "windows-latest", CMAKE_EXTRA_FLAGS: ""},
|
{ ARCHITECTURE: x64, VCPKG_TRIPLET: "x64-windows-static", RUNNER: "windows-latest", CMAKE_EXTRA_FLAGS: ""},
|
||||||
{ ARCHITECTURE: arm64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/ARM64/bin/clang-cl.exe", VCPKG_TRIPLET: "arm64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvarsarm64.bat", RUNNER: "windows-11-arm", CMAKE_EXTRA_FLAGS: "-DOQS_PERMIT_UNSUPPORTED_ARCHITECTURE=ON"}
|
{ ARCHITECTURE: arm64, VCPKG_TRIPLET: "arm64-windows-static", RUNNER: "windows-11-arm", CMAKE_EXTRA_FLAGS: "-DOQS_PERMIT_UNSUPPORTED_ARCHITECTURE=ON"}
|
||||||
]
|
]
|
||||||
runs-on: ${{ matrix.platform.RUNNER }}
|
runs-on: ${{ matrix.platform.RUNNER }}
|
||||||
name: ${{ matrix.platform.ARCHITECTURE }}
|
name: ${{ matrix.platform.ARCHITECTURE }}
|
||||||
@@ -31,14 +32,33 @@ jobs:
|
|||||||
- name: Build
|
- name: Build
|
||||||
env:
|
env:
|
||||||
ARCHITECTURE: ${{ matrix.platform.ARCHITECTURE }}
|
ARCHITECTURE: ${{ matrix.platform.ARCHITECTURE }}
|
||||||
COMPILER_PATH: ${{ matrix.platform.COMPILER_PATH }}
|
|
||||||
VCPKG_TRIPLET: ${{ matrix.platform.VCPKG_TRIPLET }}
|
VCPKG_TRIPLET: ${{ matrix.platform.VCPKG_TRIPLET }}
|
||||||
VCVARS_PATH: ${{ matrix.platform.VCVARS_PATH }}
|
|
||||||
CMAKE_EXTRA_FLAGS: ${{ matrix.platform.CMAKE_EXTRA_FLAGS }}
|
CMAKE_EXTRA_FLAGS: ${{ matrix.platform.CMAKE_EXTRA_FLAGS }}
|
||||||
run: |
|
run: |
|
||||||
set BUILD_NUMBER=0
|
set BUILD_NUMBER=0
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
|
|
||||||
|
for /f "usebackq delims=" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -property installationPath`) do set "VSINSTALL=%%i"
|
||||||
|
if "%VSINSTALL%"=="" (
|
||||||
|
echo Visual Studio installation was not found.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if /i "%ARCHITECTURE%"=="x86" (
|
||||||
|
set "VCVARS_PATH=%VSINSTALL%\VC\Auxiliary\Build\vcvars32.bat"
|
||||||
|
set "COMPILER_PATH=%VSINSTALL%\VC\Tools\Llvm\bin\clang-cl.exe"
|
||||||
|
) else if /i "%ARCHITECTURE%"=="x64" (
|
||||||
|
set "VCVARS_PATH=%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat"
|
||||||
|
set "COMPILER_PATH=%VSINSTALL%\VC\Tools\Llvm\x64\bin\clang-cl.exe"
|
||||||
|
) else if /i "%ARCHITECTURE%"=="arm64" (
|
||||||
|
set "VCVARS_PATH=%VSINSTALL%\VC\Auxiliary\Build\vcvarsarm64.bat"
|
||||||
|
set "COMPILER_PATH=%VSINSTALL%\VC\Tools\Llvm\ARM64\bin\clang-cl.exe"
|
||||||
|
) else (
|
||||||
|
echo Unsupported architecture: %ARCHITECTURE%
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
call "%VCVARS_PATH%"
|
call "%VCVARS_PATH%"
|
||||||
cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=%VCPKG_TRIPLET% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER="%COMPILER_PATH%" -DCMAKE_CXX_COMPILER="%COMPILER_PATH%" -DBUILD_NUMBER=%BUILD_NUMBER% %CMAKE_EXTRA_FLAGS% ..
|
cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=%VCPKG_TRIPLET% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER="%COMPILER_PATH%" -DCMAKE_CXX_COMPILER="%COMPILER_PATH%" -DBUILD_NUMBER=%BUILD_NUMBER% %CMAKE_EXTRA_FLAGS% ..
|
||||||
cmake --build .
|
cmake --build .
|
||||||
|
|||||||
@@ -29,11 +29,12 @@ jobs:
|
|||||||
runs-on: ${{ matrix.platform.RUNNER }}
|
runs-on: ${{ matrix.platform.RUNNER }}
|
||||||
needs: ["release"]
|
needs: ["release"]
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
platform: [
|
platform: [
|
||||||
{ ARCHITECTURE: x86, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/bin/clang-cl.exe", VCPKG_TRIPLET: "x86-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars32.bat", RUNNER: "windows-latest", CMAKE_EXTRA_FLAGS: ""},
|
{ ARCHITECTURE: x86, VCPKG_TRIPLET: "x86-windows-static", RUNNER: "windows-2022", CMAKE_EXTRA_FLAGS: ""},
|
||||||
{ ARCHITECTURE: x64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/x64/bin/clang-cl.exe", VCPKG_TRIPLET: "x64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat", RUNNER: "windows-latest", CMAKE_EXTRA_FLAGS: ""},
|
{ ARCHITECTURE: x64, VCPKG_TRIPLET: "x64-windows-static", RUNNER: "windows-latest", CMAKE_EXTRA_FLAGS: ""},
|
||||||
{ ARCHITECTURE: arm64, COMPILER_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/Llvm/ARM64/bin/clang-cl.exe", VCPKG_TRIPLET: "arm64-windows-static", VCVARS_PATH: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvarsarm64.bat", RUNNER: "windows-11-arm", CMAKE_EXTRA_FLAGS: "-DOQS_PERMIT_UNSUPPORTED_ARCHITECTURE=ON"}
|
{ ARCHITECTURE: arm64, VCPKG_TRIPLET: "arm64-windows-static", RUNNER: "windows-11-arm", CMAKE_EXTRA_FLAGS: "-DOQS_PERMIT_UNSUPPORTED_ARCHITECTURE=ON"}
|
||||||
]
|
]
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout repository"
|
- name: "Checkout repository"
|
||||||
@@ -55,13 +56,32 @@ jobs:
|
|||||||
- name: Build
|
- name: Build
|
||||||
env:
|
env:
|
||||||
ARCHITECTURE: ${{ matrix.platform.ARCHITECTURE }}
|
ARCHITECTURE: ${{ matrix.platform.ARCHITECTURE }}
|
||||||
COMPILER_PATH: ${{ matrix.platform.COMPILER_PATH }}
|
|
||||||
VCPKG_TRIPLET: ${{ matrix.platform.VCPKG_TRIPLET }}
|
VCPKG_TRIPLET: ${{ matrix.platform.VCPKG_TRIPLET }}
|
||||||
VCVARS_PATH: ${{ matrix.platform.VCVARS_PATH }}
|
|
||||||
CMAKE_EXTRA_FLAGS: ${{ matrix.platform.CMAKE_EXTRA_FLAGS }}
|
CMAKE_EXTRA_FLAGS: ${{ matrix.platform.CMAKE_EXTRA_FLAGS }}
|
||||||
run: |
|
run: |
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
|
|
||||||
|
for /f "usebackq delims=" %%i in (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -products * -property installationPath`) do set "VSINSTALL=%%i"
|
||||||
|
if "%VSINSTALL%"=="" (
|
||||||
|
echo Visual Studio installation was not found.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if /i "%ARCHITECTURE%"=="x86" (
|
||||||
|
set "VCVARS_PATH=%VSINSTALL%\VC\Auxiliary\Build\vcvars32.bat"
|
||||||
|
set "COMPILER_PATH=%VSINSTALL%\VC\Tools\Llvm\bin\clang-cl.exe"
|
||||||
|
) else if /i "%ARCHITECTURE%"=="x64" (
|
||||||
|
set "VCVARS_PATH=%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat"
|
||||||
|
set "COMPILER_PATH=%VSINSTALL%\VC\Tools\Llvm\x64\bin\clang-cl.exe"
|
||||||
|
) else if /i "%ARCHITECTURE%"=="arm64" (
|
||||||
|
set "VCVARS_PATH=%VSINSTALL%\VC\Auxiliary\Build\vcvarsarm64.bat"
|
||||||
|
set "COMPILER_PATH=%VSINSTALL%\VC\Tools\Llvm\ARM64\bin\clang-cl.exe"
|
||||||
|
) else (
|
||||||
|
echo Unsupported architecture: %ARCHITECTURE%
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
call "%VCVARS_PATH%"
|
call "%VCVARS_PATH%"
|
||||||
cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=%VCPKG_TRIPLET% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER="%COMPILER_PATH%" -DCMAKE_CXX_COMPILER="%COMPILER_PATH%" -DBUILD_NUMBER=%BUILD_NUMBER% %CMAKE_EXTRA_FLAGS% ..
|
cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=%VCPKG_TRIPLET% -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_C_COMPILER="%COMPILER_PATH%" -DCMAKE_CXX_COMPILER="%COMPILER_PATH%" -DBUILD_NUMBER=%BUILD_NUMBER% %CMAKE_EXTRA_FLAGS% ..
|
||||||
cmake --build .
|
cmake --build .
|
||||||
|
|||||||
@@ -32,14 +32,25 @@ fi
|
|||||||
if [ -z ${OPENSSL_ROOT_DIR} ]; then
|
if [ -z ${OPENSSL_ROOT_DIR} ]; then
|
||||||
unameOut="$(uname -s)"
|
unameOut="$(uname -s)"
|
||||||
if [ "$unameOut" = "Darwin" ]; then
|
if [ "$unameOut" = "Darwin" ]; then
|
||||||
echo "Environment variable OPENSSL_ROOT_DIR not set, using default Homebrew path: /usr/local/opt/openssl/"
|
# Homebrew's prefix differs by architecture: /opt/homebrew on Apple
|
||||||
export OPENSSL_ROOT_DIR="/usr/local/opt/openssl/"
|
# Silicon, /usr/local on Intel. Ask brew rather than hardcoding one.
|
||||||
|
if command -v brew > /dev/null 2>&1; then
|
||||||
|
OPENSSL_ROOT_DIR="$(brew --prefix openssl@3 2>/dev/null || brew --prefix openssl 2>/dev/null)"
|
||||||
|
fi
|
||||||
|
if [ -z "${OPENSSL_ROOT_DIR}" ]; then
|
||||||
|
OPENSSL_ROOT_DIR="/usr/local/opt/openssl/"
|
||||||
|
fi
|
||||||
|
echo "Environment variable OPENSSL_ROOT_DIR not set, using ${OPENSSL_ROOT_DIR}"
|
||||||
|
export OPENSSL_ROOT_DIR
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -z ${CPACK_GENERATOR+x} ]; then
|
if [ ! -z ${CPACK_GENERATOR+x} ]; then
|
||||||
echo "CPACK_GENERATOR is set, CPack will generate ${CPACK_GENERATOR} packages."
|
echo "CPACK_GENERATOR is set, CPack will generate ${CPACK_GENERATOR} packages."
|
||||||
CMAKE_FLAGS="-DCPACK_GENERATOR=${CPACK_GENERATOR} ${CMAKE_FLAGS}"
|
CMAKE_FLAGS="-DCPACK_GENERATOR=${CPACK_GENERATOR} ${CMAKE_FLAGS}"
|
||||||
|
elif [ "$(uname -s)" = "Darwin" ]; then
|
||||||
|
echo "Darwin detected, CPack will generate TGZ archives."
|
||||||
|
CMAKE_FLAGS="-DCPACK_GENERATOR='TGZ' ${CMAKE_FLAGS}"
|
||||||
elif [ -x "$(command -v rpm)" ]; then
|
elif [ -x "$(command -v rpm)" ]; then
|
||||||
echo "'rpm' executable found, CPack will generate RPM packages."
|
echo "'rpm' executable found, CPack will generate RPM packages."
|
||||||
CMAKE_FLAGS="-DCPACK_GENERATOR='RPM' ${CMAKE_FLAGS}"
|
CMAKE_FLAGS="-DCPACK_GENERATOR='RPM' ${CMAKE_FLAGS}"
|
||||||
|
|||||||
Generated
+1265
-181
File diff suppressed because it is too large
Load Diff
@@ -1406,7 +1406,7 @@ LIST *GetEthAdapterListInternal()
|
|||||||
{
|
{
|
||||||
LIST *o;
|
LIST *o;
|
||||||
LIST *ret;
|
LIST *ret;
|
||||||
UINT size;
|
ULONG size;
|
||||||
char *buf;
|
char *buf;
|
||||||
UINT i, j;
|
UINT i, j;
|
||||||
char *qos_tag = "(Microsoft's Packet Scheduler)"; // Allow to combine "FriendlyName" consisting of a NULL character and QOS tag.
|
char *qos_tag = "(Microsoft's Packet Scheduler)"; // Allow to combine "FriendlyName" consisting of a NULL character and QOS tag.
|
||||||
|
|||||||
@@ -3615,6 +3615,8 @@ bool PPPProcessEAPTlsResponse(PPP_SESSION *p, PPP_EAP *eap_packet, UINT eapSize)
|
|||||||
dataBuffer = eap_packet->Tls.TlsDataWithLength.Data;
|
dataBuffer = eap_packet->Tls.TlsDataWithLength.Data;
|
||||||
dataSize -= 4;
|
dataSize -= 4;
|
||||||
tlsLength = Endian32(eap_packet->Tls.TlsDataWithLength.TlsLength);
|
tlsLength = Endian32(eap_packet->Tls.TlsDataWithLength.TlsLength);
|
||||||
|
// Let's just clamp it to a safe size to avoid DoS (GHSA-q5g3-qhc6-pr3h)
|
||||||
|
tlsLength = MIN(tlsLength, PPP_MRU_MAX * 10);
|
||||||
}
|
}
|
||||||
/*Debug("=======RECV EAP-TLS PACKET DUMP=======\n");
|
/*Debug("=======RECV EAP-TLS PACKET DUMP=======\n");
|
||||||
for (i = 0; i < dataSize; i++)
|
for (i = 0; i < dataSize; i++)
|
||||||
@@ -3659,9 +3661,12 @@ bool PPPProcessEAPTlsResponse(PPP_SESSION *p, PPP_EAP *eap_packet, UINT eapSize)
|
|||||||
sizeLeft = GetMemSize(p->Eap_TlsCtx.CachedBufferRecv);
|
sizeLeft = GetMemSize(p->Eap_TlsCtx.CachedBufferRecv);
|
||||||
sizeLeft -= (UINT)(p->Eap_TlsCtx.CachedBufferRecvPntr - p->Eap_TlsCtx.CachedBufferRecv);
|
sizeLeft -= (UINT)(p->Eap_TlsCtx.CachedBufferRecvPntr - p->Eap_TlsCtx.CachedBufferRecv);
|
||||||
|
|
||||||
Copy(p->Eap_TlsCtx.CachedBufferRecvPntr, dataBuffer, MIN(sizeLeft, dataSize));
|
if (sizeLeft > 0)
|
||||||
|
{
|
||||||
|
Copy(p->Eap_TlsCtx.CachedBufferRecvPntr, dataBuffer, MIN(sizeLeft, dataSize));
|
||||||
|
|
||||||
p->Eap_TlsCtx.CachedBufferRecvPntr += MIN(sizeLeft, dataSize);
|
p->Eap_TlsCtx.CachedBufferRecvPntr += MIN(sizeLeft, dataSize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we got a cached buffer, we should feed the FIFOs via it
|
// If we got a cached buffer, we should feed the FIFOs via it
|
||||||
@@ -3783,6 +3788,8 @@ bool PPPProcessEAPTlsResponse(PPP_SESSION *p, PPP_EAP *eap_packet, UINT eapSize)
|
|||||||
}
|
}
|
||||||
AcUnlock(hub);
|
AcUnlock(hub);
|
||||||
ReleaseHub(hub);
|
ReleaseHub(hub);
|
||||||
|
// Making sure the stale pntr is cleared and can't be reused (GHSA-7437-282p-7465)
|
||||||
|
hub = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (found == false)
|
if (found == false)
|
||||||
@@ -3790,8 +3797,6 @@ bool PPPProcessEAPTlsResponse(PPP_SESSION *p, PPP_EAP *eap_packet, UINT eapSize)
|
|||||||
PPP_PACKET* pack;
|
PPP_PACKET* pack;
|
||||||
UINT identificator = p->Eap_PacketId;
|
UINT identificator = p->Eap_PacketId;
|
||||||
|
|
||||||
ReleaseHub(hub);
|
|
||||||
|
|
||||||
PPPSetStatus(p, PPP_STATUS_AUTH_FAIL);
|
PPPSetStatus(p, PPP_STATUS_AUTH_FAIL);
|
||||||
|
|
||||||
pack = ZeroMalloc(sizeof(PPP_PACKET));
|
pack = ZeroMalloc(sizeof(PPP_PACKET));
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ void IPsecWin7UpdateHostIPAddressList(IPSEC_WIN7 *w)
|
|||||||
LIST *o;
|
LIST *o;
|
||||||
UINT i;
|
UINT i;
|
||||||
BUF *buf;
|
BUF *buf;
|
||||||
UINT retsize;
|
DWORD retsize;
|
||||||
// Validate arguments
|
// Validate arguments
|
||||||
if (w == NULL)
|
if (w == NULL)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -632,7 +632,7 @@ SU_ADAPTER *SuOpenAdapter(SU *u, char *adapter_id)
|
|||||||
void *h;
|
void *h;
|
||||||
SU_ADAPTER *a;
|
SU_ADAPTER *a;
|
||||||
SL_IOCTL_EVENT_NAME t;
|
SL_IOCTL_EVENT_NAME t;
|
||||||
UINT read_size;
|
DWORD read_size;
|
||||||
// Validate arguments
|
// Validate arguments
|
||||||
if (u == NULL || adapter_id == NULL)
|
if (u == NULL || adapter_id == NULL)
|
||||||
{
|
{
|
||||||
@@ -690,7 +690,7 @@ SU_ADAPTER *SuOpenAdapter(SU *u, char *adapter_id)
|
|||||||
TOKEN_LIST *SuEnumAdapters(SU *u)
|
TOKEN_LIST *SuEnumAdapters(SU *u)
|
||||||
{
|
{
|
||||||
UINT i;
|
UINT i;
|
||||||
UINT ret_size;
|
DWORD ret_size;
|
||||||
TOKEN_LIST *ret;
|
TOKEN_LIST *ret;
|
||||||
// Validate arguments
|
// Validate arguments
|
||||||
if (u == NULL)
|
if (u == NULL)
|
||||||
@@ -730,7 +730,7 @@ TOKEN_LIST *SuEnumAdapters(SU *u)
|
|||||||
LIST *SuGetAdapterList(SU *u)
|
LIST *SuGetAdapterList(SU *u)
|
||||||
{
|
{
|
||||||
LIST *ret;
|
LIST *ret;
|
||||||
UINT read_size;
|
DWORD read_size;
|
||||||
UINT i;
|
UINT i;
|
||||||
// Validate arguments
|
// Validate arguments
|
||||||
if (u == NULL)
|
if (u == NULL)
|
||||||
@@ -893,7 +893,7 @@ SU *SuInitEx(UINT wait_for_bind_complete_tick)
|
|||||||
{
|
{
|
||||||
void *h;
|
void *h;
|
||||||
SU *u;
|
SU *u;
|
||||||
UINT read_size;
|
DWORD read_size;
|
||||||
bool flag = false;
|
bool flag = false;
|
||||||
UINT64 giveup_tick = 0;
|
UINT64 giveup_tick = 0;
|
||||||
static bool flag2 = false; // flag2 must be global
|
static bool flag2 = false; // flag2 must be global
|
||||||
|
|||||||
+4
-4
@@ -964,7 +964,7 @@ void *CreateWizardPageInstance(WIZARD *w, WIZARD_PAGE *p)
|
|||||||
|
|
||||||
t.lParam = (LPARAM)p->DialogParam;
|
t.lParam = (LPARAM)p->DialogParam;
|
||||||
|
|
||||||
return CreatePropertySheetPageW(&t);
|
return CreatePropertySheetPageW((LPCPROPSHEETPAGEW)&t);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new wizard
|
// Create a new wizard
|
||||||
@@ -2368,7 +2368,7 @@ void AdjustWindowAndControlSize(HWND hWnd, bool *need_resize, double *factor_x,
|
|||||||
*need_resize = true;
|
*need_resize = true;
|
||||||
|
|
||||||
// Get the font of the current window
|
// Get the font of the current window
|
||||||
hDlgFont = (HFONT)SendMsg(hWnd, 0, WM_GETFONT, 0, 0);
|
hDlgFont = (HFONT)SendMessageW(hWnd, WM_GETFONT, 0, 0);
|
||||||
|
|
||||||
// Get the width and height of the font of the current window
|
// Get the width and height of the font of the current window
|
||||||
CalcFontSize(hDlgFont, &dlgfont_x, &dlgfont_y);
|
CalcFontSize(hDlgFont, &dlgfont_x, &dlgfont_y);
|
||||||
@@ -2677,7 +2677,7 @@ HBITMAP ResizeBitmap(HBITMAP hSrc, UINT src_x, UINT src_y, UINT dst_x, UINT dst_
|
|||||||
// Copy once the transfer source
|
// Copy once the transfer source
|
||||||
Zero(&bi, sizeof(bi));
|
Zero(&bi, sizeof(bi));
|
||||||
Copy(&bi.bmiHeader, &h, sizeof(BITMAPINFOHEADER));
|
Copy(&bi.bmiHeader, &h, sizeof(BITMAPINFOHEADER));
|
||||||
srcHbitMap = CreateDIBSection(hMemDC, &bi, DIB_RGB_COLORS, &srcData, NULL, 0);
|
srcHbitMap = CreateDIBSection(hMemDC, &bi, DIB_RGB_COLORS, (void **)&srcData, NULL, 0);
|
||||||
|
|
||||||
hOld = SelectObject(hMemDC, srcHbitMap);
|
hOld = SelectObject(hMemDC, srcHbitMap);
|
||||||
|
|
||||||
@@ -2695,7 +2695,7 @@ HBITMAP ResizeBitmap(HBITMAP hSrc, UINT src_x, UINT src_y, UINT dst_x, UINT dst_
|
|||||||
Zero(&bi, sizeof(bi));
|
Zero(&bi, sizeof(bi));
|
||||||
Copy(&bi.bmiHeader, &h, sizeof(BITMAPINFOHEADER));
|
Copy(&bi.bmiHeader, &h, sizeof(BITMAPINFOHEADER));
|
||||||
|
|
||||||
ret = CreateDIBSection(hMemDC, &bi, DIB_RGB_COLORS, &data, NULL, 0);
|
ret = CreateDIBSection(hMemDC, &bi, DIB_RGB_COLORS, (void **)&data, NULL, 0);
|
||||||
|
|
||||||
if(srcData != NULL && data != NULL)
|
if(srcData != NULL && data != NULL)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ set_target_properties(mayaqua
|
|||||||
|
|
||||||
find_package(OpenSSL REQUIRED)
|
find_package(OpenSSL REQUIRED)
|
||||||
|
|
||||||
if(OPENSSL_VERSION VERSION_GREATER_EQUAL "3")
|
if(OPENSSL_VERSION VERSION_GREATER_EQUAL "3.0.0" AND OPENSSL_VERSION VERSION_LESS "4.0.0")
|
||||||
set(OQS_ENABLE ON CACHE BOOL "By setting this to OFF, Open Quantum Safe algorithms will not be built in")
|
set(OQS_ENABLE ON CACHE BOOL "By setting this to OFF, Open Quantum Safe algorithms will not be built in")
|
||||||
else()
|
else()
|
||||||
# Disable oqsprovider when OpenSSL version < 3
|
# Disable oqsprovider when OpenSSL version < 3
|
||||||
@@ -140,7 +140,7 @@ if(UNIX)
|
|||||||
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(amd64|i386)")
|
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(amd64|i386)")
|
||||||
message("cpu_features is not available on FreeBSD/${CMAKE_SYSTEM_PROCESSOR}")
|
message("cpu_features is not available on FreeBSD/${CMAKE_SYSTEM_PROCESSOR}")
|
||||||
add_definitions(-DSKIP_CPU_FEATURES)
|
add_definitions(-DSKIP_CPU_FEATURES)
|
||||||
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" AND NOT CMAKE_SYSTEM_NAME MATCHES "^(arm64|x86_64)")
|
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|x86_64)")
|
||||||
# macOS runs only on Intel or ARM architecrues, should not reach here
|
# macOS runs only on Intel or ARM architecrues, should not reach here
|
||||||
add_definitions(-DSKIP_CPU_FEATURES)
|
add_definitions(-DSKIP_CPU_FEATURES)
|
||||||
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS" OR ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
|
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS" OR ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
|
||||||
|
|||||||
@@ -129,7 +129,7 @@
|
|||||||
// Macro
|
// Macro
|
||||||
#define HASHED_DATA(p) (((UCHAR *)p) + 15)
|
#define HASHED_DATA(p) (((UCHAR *)p) + 15)
|
||||||
|
|
||||||
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
#if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)) || LIBRESSL_VERSION_NUMBER >= 0x3080100L
|
||||||
typedef struct PKCS12_st PKCS12;
|
typedef struct PKCS12_st PKCS12;
|
||||||
typedef struct evp_md_st EVP_MD;
|
typedef struct evp_md_st EVP_MD;
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -9265,12 +9265,12 @@ bool Win32GetDnsSuffix(char *domain, UINT size)
|
|||||||
|
|
||||||
info_size = 0;
|
info_size = 0;
|
||||||
info = ZeroMalloc(sizeof(IP_ADAPTER_ADDRESSES_XP));
|
info = ZeroMalloc(sizeof(IP_ADAPTER_ADDRESSES_XP));
|
||||||
if (GetAdaptersAddresses(AF_INET, 0, NULL, info, &info_size) == ERROR_BUFFER_OVERFLOW)
|
if (GetAdaptersAddresses(AF_INET, 0, NULL, (PIP_ADAPTER_ADDRESSES)info, &info_size) == ERROR_BUFFER_OVERFLOW)
|
||||||
{
|
{
|
||||||
Free(info);
|
Free(info);
|
||||||
info = ZeroMalloc(info_size);
|
info = ZeroMalloc(info_size);
|
||||||
}
|
}
|
||||||
if (GetAdaptersAddresses(AF_INET, 0, NULL, info, &info_size) != NO_ERROR)
|
if (GetAdaptersAddresses(AF_INET, 0, NULL, (PIP_ADAPTER_ADDRESSES)info, &info_size) != NO_ERROR)
|
||||||
{
|
{
|
||||||
Free(info);
|
Free(info);
|
||||||
return false;
|
return false;
|
||||||
@@ -11852,7 +11852,7 @@ bool StartSSLEx3(SOCK *sock, X *x, K *priv, LIST *chain, UINT ssl_timeout, char
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
#if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)) || LIBRESSL_VERSION_NUMBER >= 0x3060000L
|
||||||
if (sock->SslAcceptSettings.Override_Security_Level)
|
if (sock->SslAcceptSettings.Override_Security_Level)
|
||||||
{
|
{
|
||||||
SSL_CTX_set_security_level(ssl_ctx, sock->SslAcceptSettings.Override_Security_Level_Value);
|
SSL_CTX_set_security_level(ssl_ctx, sock->SslAcceptSettings.Override_Security_Level_Value);
|
||||||
@@ -16262,7 +16262,7 @@ UINT GetOSSecurityLevel()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
#if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)) || LIBRESSL_VERSION_NUMBER >= 0x3060000L
|
||||||
security_level_new = SSL_CTX_get_security_level(ctx);
|
security_level_new = SSL_CTX_get_security_level(ctx);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -16346,7 +16346,7 @@ TOKEN_LIST *GetCipherList()
|
|||||||
return ciphers;
|
return ciphers;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
|
#if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)) || LIBRESSL_VERSION_NUMBER >= 0x2090100L
|
||||||
sk = SSL_get1_supported_ciphers(ssl);
|
sk = SSL_get1_supported_ciphers(ssl);
|
||||||
#else
|
#else
|
||||||
sk = SSL_get_ciphers(ssl);
|
sk = SSL_get_ciphers(ssl);
|
||||||
|
|||||||
@@ -1849,6 +1849,8 @@ void UnixUnlockEx(LOCK *lock, bool inner)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Lock
|
// Lock
|
||||||
|
// Recursive locking is implemented manually instead of using PTHREAD_MUTEX_RECURSIVE.
|
||||||
|
// See: https://github.com/SoftEtherVPN/SoftEtherVPN/pull/2219
|
||||||
bool UnixLock(LOCK *lock)
|
bool UnixLock(LOCK *lock)
|
||||||
{
|
{
|
||||||
pthread_mutex_t *mutex;
|
pthread_mutex_t *mutex;
|
||||||
|
|||||||
+6
-6
@@ -195,7 +195,7 @@ void Win32InitNewThread()
|
|||||||
bool Win32SetFolderCompressW(wchar_t *path, bool compressed)
|
bool Win32SetFolderCompressW(wchar_t *path, bool compressed)
|
||||||
{
|
{
|
||||||
HANDLE h;
|
HANDLE h;
|
||||||
UINT retsize = 0;
|
DWORD retsize = 0;
|
||||||
USHORT flag;
|
USHORT flag;
|
||||||
wchar_t tmp[MAX_PATH];
|
wchar_t tmp[MAX_PATH];
|
||||||
// Validate arguments
|
// Validate arguments
|
||||||
@@ -239,7 +239,7 @@ bool Win32SetFolderCompressW(wchar_t *path, bool compressed)
|
|||||||
bool Win32SetFolderCompress(char *path, bool compressed)
|
bool Win32SetFolderCompress(char *path, bool compressed)
|
||||||
{
|
{
|
||||||
HANDLE h;
|
HANDLE h;
|
||||||
UINT retsize = 0;
|
DWORD retsize = 0;
|
||||||
USHORT flag;
|
USHORT flag;
|
||||||
char tmp[MAX_PATH];
|
char tmp[MAX_PATH];
|
||||||
// Validate arguments
|
// Validate arguments
|
||||||
@@ -2822,7 +2822,7 @@ bool Win32InitThread(THREAD *t)
|
|||||||
{
|
{
|
||||||
WIN32THREAD *w;
|
WIN32THREAD *w;
|
||||||
HANDLE hThread;
|
HANDLE hThread;
|
||||||
DWORD thread_id;
|
UINT thread_id;
|
||||||
WIN32THREADSTARTUPINFO *info;
|
WIN32THREADSTARTUPINFO *info;
|
||||||
// Validate arguments
|
// Validate arguments
|
||||||
if (t == NULL)
|
if (t == NULL)
|
||||||
@@ -3033,13 +3033,13 @@ void Win32GetSystemTime(SYSTEMTIME *system_time)
|
|||||||
// Increment of 32bit integer
|
// Increment of 32bit integer
|
||||||
void Win32Inc32(UINT *value)
|
void Win32Inc32(UINT *value)
|
||||||
{
|
{
|
||||||
InterlockedIncrement(value);
|
InterlockedIncrement((volatile LONG *)value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decrement of 32bit integer
|
// Decrement of 32bit integer
|
||||||
void Win32Dec32(UINT *value)
|
void Win32Dec32(UINT *value)
|
||||||
{
|
{
|
||||||
InterlockedDecrement(value);
|
InterlockedDecrement((volatile LONG *)value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sleep the thread
|
// Sleep the thread
|
||||||
@@ -3341,7 +3341,7 @@ char *Win32InputFromFileLineA()
|
|||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
char c;
|
char c;
|
||||||
UINT read_size = 0;
|
DWORD read_size = 0;
|
||||||
|
|
||||||
if (ReadFile(hstdin, &c, 1, &read_size, NULL) == false)
|
if (ReadFile(hstdin, &c, 1, &read_size, NULL) == false)
|
||||||
{
|
{
|
||||||
|
|||||||
+48
-82
@@ -483,13 +483,16 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/baseline-browser-mapping": {
|
"node_modules/baseline-browser-mapping": {
|
||||||
"version": "2.9.19",
|
"version": "2.11.20",
|
||||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
|
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.20.tgz",
|
||||||
"integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==",
|
"integrity": "sha512-H0ulySigv6icDJ1F7SjtdCD6PrhTpdYCmP0CactWy1+ekh0AFd0o1Wn5T8b+hnTmdBx19u9yhL6wvCylXMY7zw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
"baseline-browser-mapping": "dist/cli.js"
|
"baseline-browser-mapping": "dist/cli.cjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/brace-expansion": {
|
"node_modules/brace-expansion": {
|
||||||
@@ -527,9 +530,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/browserslist": {
|
"node_modules/browserslist": {
|
||||||
"version": "4.28.1",
|
"version": "4.28.8",
|
||||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
|
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz",
|
||||||
"integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
|
"integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -547,11 +550,11 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"baseline-browser-mapping": "^2.9.0",
|
"baseline-browser-mapping": "^2.11.12",
|
||||||
"caniuse-lite": "^1.0.30001759",
|
"caniuse-lite": "^1.0.30001809",
|
||||||
"electron-to-chromium": "^1.5.263",
|
"electron-to-chromium": "^1.5.402",
|
||||||
"node-releases": "^2.0.27",
|
"node-releases": "^2.0.53",
|
||||||
"update-browserslist-db": "^1.2.0"
|
"update-browserslist-db": "^1.3.0"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"browserslist": "cli.js"
|
"browserslist": "cli.js"
|
||||||
@@ -577,9 +580,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001768",
|
"version": "1.0.30001810",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001768.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz",
|
||||||
"integrity": "sha512-qY3aDRZC5nWPgHUgIB84WL+nySuo19wk0VJpp/XI9T34lrvkyhRvNVOFJOp2kxClQhiFBu+TaUSudf6oa3vkSA==",
|
"integrity": "sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -698,9 +701,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.5.286",
|
"version": "1.5.420",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.420.tgz",
|
||||||
"integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==",
|
"integrity": "sha512-2yD6XreGusOfNV+dUcvipJEXc3n/n7fgr7996aszTG+YY5E4mqM4tOq/3uhP129cazL9YHbVWSpc79ePotWtPA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
@@ -838,9 +841,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/fast-uri": {
|
"node_modules/fast-uri": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.7",
|
||||||
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz",
|
||||||
"integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
|
"integrity": "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1088,9 +1091,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/js-yaml": {
|
"node_modules/js-yaml": {
|
||||||
"version": "3.14.2",
|
"version": "3.15.2",
|
||||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.2.tgz",
|
||||||
"integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
|
"integrity": "sha512-6EuL879VkRA+1Cz578mKMiKvjPNEuk6+r1JaFzoSWejZmtf7xWbIyw1e3KkxlkzTIt9Taw6JBhEppG7utc1P+w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -1203,10 +1206,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/minimatch": {
|
"node_modules/minimatch": {
|
||||||
"version": "3.1.2",
|
"version": "3.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
|
||||||
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
"integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"brace-expansion": "^1.1.7"
|
"brace-expansion": "^1.1.7"
|
||||||
},
|
},
|
||||||
@@ -1242,11 +1246,14 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/node-releases": {
|
"node_modules/node-releases": {
|
||||||
"version": "2.0.27",
|
"version": "2.0.54",
|
||||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
|
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.54.tgz",
|
||||||
"integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
|
"integrity": "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"node_modules/once": {
|
"node_modules/once": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
@@ -1334,10 +1341,11 @@
|
|||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/picomatch": {
|
"node_modules/picomatch": {
|
||||||
"version": "2.3.1",
|
"version": "2.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
|
||||||
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8.6"
|
"node": ">=8.6"
|
||||||
},
|
},
|
||||||
@@ -1357,16 +1365,6 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/randombytes": {
|
|
||||||
"version": "2.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
|
||||||
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"safe-buffer": "^5.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/rechoir": {
|
"node_modules/rechoir": {
|
||||||
"version": "0.8.0",
|
"version": "0.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
|
||||||
@@ -1436,27 +1434,6 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/safe-buffer": {
|
|
||||||
"version": "5.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
|
||||||
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
|
||||||
"dev": true,
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/feross"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "patreon",
|
|
||||||
"url": "https://www.patreon.com/feross"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "consulting",
|
|
||||||
"url": "https://feross.org/support"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/schema-utils": {
|
"node_modules/schema-utils": {
|
||||||
"version": "4.3.3",
|
"version": "4.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
|
||||||
@@ -1486,16 +1463,6 @@
|
|||||||
"semver": "bin/semver"
|
"semver": "bin/semver"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/serialize-javascript": {
|
|
||||||
"version": "6.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
|
|
||||||
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "BSD-3-Clause",
|
|
||||||
"dependencies": {
|
|
||||||
"randombytes": "^2.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/shallow-clone": {
|
"node_modules/shallow-clone": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
|
||||||
@@ -1614,16 +1581,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/terser-webpack-plugin": {
|
"node_modules/terser-webpack-plugin": {
|
||||||
"version": "5.3.16",
|
"version": "5.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz",
|
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz",
|
||||||
"integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==",
|
"integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jridgewell/trace-mapping": "^0.3.25",
|
"@jridgewell/trace-mapping": "^0.3.25",
|
||||||
"jest-worker": "^27.4.5",
|
"jest-worker": "^27.4.5",
|
||||||
"schema-utils": "^4.3.0",
|
"schema-utils": "^4.3.0",
|
||||||
"serialize-javascript": "^6.0.2",
|
|
||||||
"terser": "^5.31.1"
|
"terser": "^5.31.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -1833,9 +1799,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/update-browserslist-db": {
|
"node_modules/update-browserslist-db": {
|
||||||
"version": "1.2.3",
|
"version": "1.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz",
|
||||||
"integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
|
"integrity": "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
|||||||
+1
-1
Submodule src/libhamcore updated: 2951ae5b61...fb8d49782a
@@ -17,6 +17,20 @@ race_top:BindConnectThreadForIPv4
|
|||||||
race_top:BindConnectThreadForIPv6
|
race_top:BindConnectThreadForIPv6
|
||||||
race_top:BindConnectEx5
|
race_top:BindConnectEx5
|
||||||
|
|
||||||
|
# Thread Sanitizer reports data races on PoolHalting in THREAD, shared between ThreadPoolProc and WaitThread.
|
||||||
|
# But if WaitThread reads false, synchronization is ensured by Wait from the PoolWaitList. If it reads true,
|
||||||
|
# WaitThread simply returns.
|
||||||
|
race_top:ThreadPoolProc
|
||||||
|
|
||||||
|
|
||||||
|
## Accept/Disconnect cancellation
|
||||||
|
# Thread Sanitizer reports two data races on CancelAccept and CallingThread in SOCK, shared between
|
||||||
|
# Accept(Accept6) and Disconnect. These are used when interrupting an Accept operation from a Disconnect.
|
||||||
|
# They are race-safe because they work correctly even if both fields have old values.
|
||||||
|
race_top:^Accept$
|
||||||
|
race_top:^Accept6$
|
||||||
|
race_top:^Disconnect$
|
||||||
|
|
||||||
|
|
||||||
## Manual PTHREAD_MUTEX_RECURSIVE
|
## Manual PTHREAD_MUTEX_RECURSIVE
|
||||||
# The Lock/Unlock mechanism on Unix is a manual, hand-coded implementation of PTHREAD_MUTEX_RECURSIVE.
|
# The Lock/Unlock mechanism on Unix is a manual, hand-coded implementation of PTHREAD_MUTEX_RECURSIVE.
|
||||||
|
|||||||
Reference in New Issue
Block a user