Sha256: 63faf68742e3e7205baa38e9b0f93b5b49ee5cfdbf813f4d24ddc80b82fefbda

Contents?: true

Size: 1.8 KB

Versions: 13

Compression:

Stored size: 1.8 KB

Contents

/**
 * Copyright (c) 2016 Tino Reichardt
 * All rights reserved.
 *
 * This source code is licensed under both the BSD-style license (found in the
 * LICENSE file in the root directory of this source tree) and the GPLv2 (found
 * in the COPYING file in the root directory of this source tree).
 *
 * You can contact the author at:
 * - zstdmt source repository: https://github.com/mcmilk/zstdmt
 */

/**
 * This file will hold wrapper for systems, which do not support pthreads
 */

/* create fake symbol to avoid empty translation unit warning */
int g_ZSTD_threading_useless_symbol;

#if defined(ZSTD_MULTITHREAD) && defined(_WIN32)

/**
 * Windows minimalist Pthread Wrapper, based on :
 * http://www.cse.wustl.edu/~schmidt/win32-cv-1.html
 */


/* ===  Dependencies  === */
#include <process.h>
#include <errno.h>
#include "threading.h"


/* ===  Implementation  === */

static unsigned __stdcall worker(void *arg)
{
    ZSTD_pthread_t* const thread = (ZSTD_pthread_t*) arg;
    thread->arg = thread->start_routine(thread->arg);
    return 0;
}

int ZSTD_pthread_create(ZSTD_pthread_t* thread, const void* unused,
            void* (*start_routine) (void*), void* arg)
{
    (void)unused;
    thread->arg = arg;
    thread->start_routine = start_routine;
    thread->handle = (HANDLE) _beginthreadex(NULL, 0, worker, thread, 0, NULL);

    if (!thread->handle)
        return errno;
    else
        return 0;
}

int ZSTD_pthread_join(ZSTD_pthread_t thread, void **value_ptr)
{
    DWORD result;

    if (!thread.handle) return 0;

    result = WaitForSingleObject(thread.handle, INFINITE);
    switch (result) {
    case WAIT_OBJECT_0:
        if (value_ptr) *value_ptr = thread.arg;
        return 0;
    case WAIT_ABANDONED:
        return EINVAL;
    default:
        return GetLastError();
    }
}

#endif   /* ZSTD_MULTITHREAD */

Version data entries

13 entries across 13 versions & 3 rubygems

Version Path
zstdlib-0.4.0 ext/zstdlib/zstd-1.4.3/lib/common/threading.c
zstdlib-0.4.0-x86-mingw32 ext/zstdlib/zstd-1.4.3/lib/common/threading.c
zstdlib-0.4.0-x64-mingw32 ext/zstdlib/zstd-1.4.3/lib/common/threading.c
zstdlib-0.3.0 ext/zstdlib/zstd-1.4.2/lib/common/threading.c
zstdlib-0.3.0-x86-mingw32 ext/zstdlib/zstd-1.4.2/lib/common/threading.c
zstdlib-0.3.0-x64-mingw32 ext/zstdlib/zstd-1.4.2/lib/common/threading.c
zstd-ruby-1.4.2.0 ext/zstdruby/libzstd/common/threading.c
zstd-ruby-1.4.1.0 ext/zstdruby/libzstd/common/threading.c
zstdlib-0.2.0-x86-mingw32 ext/zstdlib/zstd-1.4.0/lib/common/threading.c
zstdlib-0.2.0-x64-mingw32 ext/zstdlib/zstd-1.4.0/lib/common/threading.c
zstdlib-0.2.0 ext/zstdlib/zstd-1.4.0/lib/common/threading.c
extzstd-0.3 contrib/zstd/lib/common/threading.c
zstd-ruby-1.4.0.0 ext/zstdruby/libzstd/common/threading.c