Commit c521edc3 authored by Matt Caswell's avatar Matt Caswell Committed by Richard Levitte
Browse files

Some platforms provide getcontext() but it does not work



Some platforms claim to be POSIX but their getcontext() implementation
does not work. Therefore we update the ASYNC_is_capable() function to test
for this.

RT#4366

Reviewed-by: default avatarRichard Levitte <levitte@openssl.org>
parent 685b6f29
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -62,7 +62,13 @@

int ASYNC_is_capable(void)
{
    return 1;
    ucontext_t ctx;

    /*
     * Some platforms provide getcontext() but it does not work (notably
     * MacOSX PPC64). Check for a working getcontext();
     */
    return getcontext(&ctx) == 0;
}

void async_local_cleanup(void)
+14 −31
Original line number Diff line number Diff line
@@ -61,21 +61,6 @@
#include <openssl/crypto.h>
#include <../apps/apps.h>

#if (defined(OPENSSL_SYS_UNIX) || defined(OPENSSL_SYS_CYGWIN)) && defined(OPENSSL_THREADS)
# include <unistd.h>
# if _POSIX_VERSION >= 200112L
#  define ASYNC_POSIX
# endif
#elif defined(_WIN32)
# define ASYNC_WIN
#endif

#if !defined(ASYNC_POSIX) && !defined(ASYNC_WIN)
# define ASYNC_NULL
#endif

#ifndef ASYNC_NULL

static int ctr = 0;
static ASYNC_JOB *currjob = NULL;

@@ -308,14 +293,12 @@ static int test_ASYNC_block_pause()
    return 1;
}

#endif

int main(int argc, char **argv)
{

#ifdef ASYNC_NULL
    fprintf(stderr, "NULL implementation - skipping async tests\n");
#else
    if (!ASYNC_is_capable()) {
        fprintf(stderr,
                "OpenSSL build is not ASYNC capable - skipping async tests\n");
    } else {
        CRYPTO_set_mem_debug(1);
        CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);

@@ -326,7 +309,7 @@ int main(int argc, char **argv)
                || !test_ASYNC_block_pause()) {
            return 1;
        }
#endif
    }
    printf("PASS\n");
    return 0;
}