Branch: refs/heads/master
  Home:   https://github.com/openssl/openssl
  Commit: 4e43bc06f7673597a99f61325543449e72070c8c
      
https://github.com/openssl/openssl/commit/4e43bc06f7673597a99f61325543449e72070c8c
  Author: Čestmír Kalina <ckal...@redhat.com>
  Date:   2022-10-21 (Fri, 21 Oct 2022)

  Changed paths:
    M crypto/thread/arch.c
    M crypto/thread/arch/thread_none.c
    M crypto/thread/arch/thread_posix.c
    M crypto/thread/arch/thread_win.c
    M include/internal/thread_arch.h
    M test/threadstest.c

  Log Message:
  -----------
  crypto: thread: serialize concurrent joins

Multiple concurrent joins with a running thread suffer from a race
condition that allows concurrent join calls to perform concurrent arch
specific join calls, which is UB on POSIX, or to concurrently execute
join and terminate calls.

As soon as a thread T1 exists, one of the threads that joins with T1
is selected to perform the join, the remaining ones await completion.
Once completed, the remaining calls immediately return. If the join
failed, another thread is selected to attempt the join operation.

Forcefully terminating a thread that is in the process of joining
another thread is not supported.

Common code from thread_posix and thread_win was refactored to use
common wrapper that handles synchronization.

Signed-off-by: Čestmír Kalina <ckal...@redhat.com>

Reviewed-by: Hugo Landau <hlan...@openssl.org>
Reviewed-by: Tomas Mraz <to...@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/19433)


  Commit: 6ca4bd2e4c92531e74acba3e1ff08e6fbb664b20
      
https://github.com/openssl/openssl/commit/6ca4bd2e4c92531e74acba3e1ff08e6fbb664b20
  Author: Čestmír Kalina <ckal...@redhat.com>
  Date:   2022-10-21 (Fri, 21 Oct 2022)

  Changed paths:
    M test/threadstest.c

  Log Message:
  -----------
  test: threads: replace test_thread_noreturn

While POSIX threads are cancellable and may be asynchronously cancelled,
their cancellation is not guaranteed by the POSIX standard.

test_thread_noreturn, which simulates a long-running possibly
unresponsive thread:

        THREAD #1               THREAD #2
        LOCK L1
        SPAWN #2
                                LOCK L1

On MacOS, cancelling such thread only queues cancellation request, but
the following pthread_join hangs.

Replace this implementation by an unbounded sequence of sleeps instead.

Signed-off-by: Čestmír Kalina <ckal...@redhat.com>

Reviewed-by: Hugo Landau <hlan...@openssl.org>
Reviewed-by: Tomas Mraz <to...@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/19433)


Compare: https://github.com/openssl/openssl/compare/ec1d5970be59...6ca4bd2e4c92

Reply via email to