Remove pthreads
Some checks failed
CMake / ubuntu-latest - shared=OFF, pthread=OFF, posix=OFF (push) Successful in 14s
CMake / ubuntu-latest - shared=ON, pthread=OFF, posix=OFF (push) Successful in 15s
CMake / ubuntu-latest - shared=ON, pthread=OFF, posix=ON (push) Has been cancelled
CMake / ubuntu-latest - shared=OFF, pthread=ON, posix=ON (push) Has been cancelled
CMake / ubuntu-latest - shared=ON, pthread=ON, posix=ON (push) Has been cancelled
CMake / ubuntu-latest - shared=OFF, pthread=OFF, posix=ON (push) Has been cancelled

Signed-off-by: Slendi <slendi@socopon.com>
This commit is contained in:
2025-08-09 08:39:55 +03:00
parent 41badf33d9
commit ec3bf6061d
3 changed files with 18 additions and 89 deletions

View File

@@ -2,7 +2,6 @@ cmake_minimum_required(VERSION 3.10)
project(DCFG C) project(DCFG C)
option(DCFG_PTHREAD_SUPPORT "Enable pthreads support" ON)
option(DCFG_POSIX_SUPPORT "Enable POSIX support" ON) option(DCFG_POSIX_SUPPORT "Enable POSIX support" ON)
option(DCFG_BUILD_PROGRAMS "Build DCFG example programs" ON) option(DCFG_BUILD_PROGRAMS "Build DCFG example programs" ON)
option(DCFG_ASAN "Enable AddressSanitizer" OFF) option(DCFG_ASAN "Enable AddressSanitizer" OFF)
@@ -37,12 +36,6 @@ add_library(${PROJECT_NAME}_static STATIC ${SRC_DIR}/dcfg.c)
set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME "dcfg") set_target_properties(${PROJECT_NAME}_static PROPERTIES OUTPUT_NAME "dcfg")
foreach(TARGET ${PROJECT_NAME}_shared ${PROJECT_NAME}_static) foreach(TARGET ${PROJECT_NAME}_shared ${PROJECT_NAME}_static)
if(DCFG_PTHREAD_SUPPORT)
find_package(Threads REQUIRED)
target_link_libraries(${TARGET} PRIVATE Threads::Threads)
target_compile_definitions(${TARGET} PRIVATE DCFG_PTHREAD_SUPPORT)
endif()
if(DCFG_POSIX_SUPPORT) if(DCFG_POSIX_SUPPORT)
target_compile_definitions(${TARGET} PRIVATE DCFG_POSIX_SUPPORT) target_compile_definitions(${TARGET} PRIVATE DCFG_POSIX_SUPPORT)
endif() endif()
@@ -77,10 +70,6 @@ if(DCFG_BUILD_PROGRAMS)
target_include_directories(${PROG_NAME} PRIVATE ${INCLUDE_DIR}) target_include_directories(${PROG_NAME} PRIVATE ${INCLUDE_DIR})
target_link_libraries(${PROG_NAME} PRIVATE ${PROJECT_NAME}_static) target_link_libraries(${PROG_NAME} PRIVATE ${PROJECT_NAME}_static)
if(DCFG_PTHREAD_SUPPORT)
target_link_libraries(${PROG_NAME} PRIVATE Threads::Threads)
endif()
if(MSVC) if(MSVC)
target_compile_options(${PROG_NAME} PRIVATE /W4 /permissive-) target_compile_options(${PROG_NAME} PRIVATE /W4 /permissive-)
else() else()

View File

@@ -6,7 +6,6 @@ BUILD_DIR="BUILD"
INSTALL_DIR=$PWD/install INSTALL_DIR=$PWD/install
CFLAGS="-Wall -Wextra -pedantic -Werror -Wno-newline-eof -Wno-language-extension-token -Wno-unused-command-line-argument" CFLAGS="-Wall -Wextra -pedantic -Werror -Wno-newline-eof -Wno-language-extension-token -Wno-unused-command-line-argument"
BUILD_SHARED=1 BUILD_SHARED=1
PTHREAD_SUPPORT=1
POSIX_SUPPORT=1 POSIX_SUPPORT=1
BUILD_PROGRAMS=1 BUILD_PROGRAMS=1
SRC_DIR="src" SRC_DIR="src"
@@ -18,7 +17,6 @@ for arg in "$@"; do
case $arg in case $arg in
--debug) CFLAGS="$CFLAGS -g -O0" ;; --debug) CFLAGS="$CFLAGS -g -O0" ;;
--release) CFLAGS="$CFLAGS -O2" ;; --release) CFLAGS="$CFLAGS -O2" ;;
--no-pthread) PTHREAD_SUPPORT=0 ;;
--no-posix) POSIX_SUPPORT=0 ;; --no-posix) POSIX_SUPPORT=0 ;;
--no-programs) BUILD_PROGRAMS=0 ;; --no-programs) BUILD_PROGRAMS=0 ;;
--clean) rm -rf "$BUILD_DIR" "$INSTALL_DIR"; echo "Cleaned."; exit 0 ;; --clean) rm -rf "$BUILD_DIR" "$INSTALL_DIR"; echo "Cleaned."; exit 0 ;;
@@ -48,14 +46,6 @@ else
CFLAGS="$CFLAGS -std=c99" CFLAGS="$CFLAGS -std=c99"
fi fi
if [ "$PTHREAD_SUPPORT" -eq 1 ]; then
CFLAGS="$CFLAGS -DDCFG_PTHREAD_SUPPORT=1"
if [ "$OS" = "SunOS" ]; then
LIBS="$LIBS -mt"
else
LIBS="$LIBS -lpthread"
fi
fi
if [ "$POSIX_SUPPORT" -eq 1 ]; then if [ "$POSIX_SUPPORT" -eq 1 ]; then
CFLAGS="$CFLAGS -DDCFG_POSIX_SUPPORT=1" CFLAGS="$CFLAGS -DDCFG_POSIX_SUPPORT=1"
fi fi

View File

@@ -42,33 +42,6 @@
# define _POSIX_C_SOURCE 0L # define _POSIX_C_SOURCE 0L
#endif #endif
#if DCFG_PTHREAD_SUPPORT
# ifdef _POSIX_C_SOURCE
# undef _POSIX_C_SOURCE
# endif
# define _POSIX_C_SOURCE 200809L
# include <pthread.h>
extern int pthread_mutexattr_settype(pthread_mutexattr_t *, int);
#else
# if defined __USE_POSIX199506 || defined __USE_UNIX98
# else
typedef struct {
int unused;
} pthread_mutex_t;
typedef struct {
int unused;
} pthread_mutexattr_t;
# define PTHREAD_MUTEX_RECURSIVE_NP 0
# endif
static void pthread_mutex_init(pthread_mutex_t *m, void *data) { (void)m; (void)data; }
static void pthread_mutex_destroy(pthread_mutex_t *m) { (void)m; }
static void pthread_mutex_lock(pthread_mutex_t *m) { (void)m; }
static void pthread_mutex_unlock(pthread_mutex_t *m) { (void)m; }
void pthread_mutexattr_init(pthread_mutexattr_t *attr);
static void pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type) { (void)attr; (void)type; }
#endif
#include <assert.h> #include <assert.h>
#include <ctype.h> #include <ctype.h>
#include <errno.h> #include <errno.h>
@@ -79,7 +52,7 @@ static void pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type) { (vo
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
int64_t dcfg_strtoll(const char *s, char **end, int base) int64_t dcfg_strtoll(char const *s, char **end, int base)
{ {
char const *p = s; char const *p = s;
while (isspace((unsigned char)*p)) while (isspace((unsigned char)*p))
@@ -360,8 +333,6 @@ static void environment_destroy(Environment *env, bool destroy_values)
} }
struct dcfg_Instance { struct dcfg_Instance {
pthread_mutex_t mtx;
dcfg_AllocFn alloc; dcfg_AllocFn alloc;
dcfg_FreeFn free; dcfg_FreeFn free;
dcfg_RealpathFn realpath; dcfg_RealpathFn realpath;
@@ -382,10 +353,21 @@ struct dcfg_Instance {
static void *alloc(size_t size) { return calloc(1, size); } static void *alloc(size_t size) { return calloc(1, size); }
#ifdef __linux__
# include <linux/limits.h>
#else
# ifndef PATH_MAX
# define PATH_MAX 4096
# endif
#endif
#if DCFG_POSIX_SUPPORT #if DCFG_POSIX_SUPPORT
static char *realpath_(char const *s) { static char *realpath_(char const *s)
{
char buf[PATH_MAX]; char buf[PATH_MAX];
return strdup(realpath(s, buf)); char *ss = malloc(strlen(realpath(s, buf)) + 1);
strcpy(ss, s);
return ss;
} }
void *fopen_(char const *f, char const *a) { return fopen(f, a); } void *fopen_(char const *f, char const *a) { return fopen(f, a); }
int fseek_(void *f, size_t p, int o) { return fseek(f, p, o); } int fseek_(void *f, size_t p, int o) { return fseek(f, p, o); }
@@ -399,12 +381,6 @@ dcfg_Version dcfg_get_version(void)
| ((uint64_t)VERSION_PATCH & 0xFFFFFFFFULL); | ((uint64_t)VERSION_PATCH & 0xFFFFFFFFULL);
} }
#if __FreeBSD__
#define MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE
#else
#define MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP
#endif
dcfg_Instance *dcfg_make_instance(dcfg_InstanceCreateInfo const *create_info) dcfg_Instance *dcfg_make_instance(dcfg_InstanceCreateInfo const *create_info)
{ {
assert(create_info); assert(create_info);
@@ -414,11 +390,6 @@ dcfg_Instance *dcfg_make_instance(dcfg_InstanceCreateInfo const *create_info)
return NULL; return NULL;
} }
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, MUTEX_RECURSIVE);
pthread_mutex_init(&instance->mtx, &attr);
instance->alloc = create_info->alloc; instance->alloc = create_info->alloc;
instance->free = create_info->free; instance->free = create_info->free;
if (!instance->alloc) { if (!instance->alloc) {
@@ -482,13 +453,6 @@ void dcfg_destroy_instance(dcfg_Instance *instance)
} }
vector_free(instance->sourcev); vector_free(instance->sourcev);
pthread_mutex_lock(&instance->mtx);
{ // De-init other instance things
}
pthread_mutex_unlock(&instance->mtx);
pthread_mutex_destroy(&instance->mtx);
free(instance); free(instance);
} }
@@ -498,15 +462,10 @@ char const *dcfg_last_error(dcfg_Instance *instance)
char const *ret = NULL; char const *ret = NULL;
pthread_mutex_lock(&instance->mtx); if (!instance->last_error[0]) {
{ return NULL;
if (!instance->last_error[0]) {
pthread_mutex_unlock(&instance->mtx);
return NULL;
}
ret = instance->last_error;
} }
pthread_mutex_unlock(&instance->mtx); ret = instance->last_error;
return ret; return ret;
} }
@@ -1997,16 +1956,13 @@ bool dcfg_Value_evaluate_in_env(
bool dcfg_call_function( bool dcfg_call_function(
dcfg_Value *fn, dcfg_Value **args, size_t argc, dcfg_Value **out_value) dcfg_Value *fn, dcfg_Value **args, size_t argc, dcfg_Value **out_value)
{ {
pthread_mutex_lock(&fn->instance->mtx);
if (fn->v.f.is_builtin) { if (fn->v.f.is_builtin) {
*out_value = fn->v.f.v.bi(args, argc); *out_value = fn->v.f.v.bi(args, argc);
pthread_mutex_unlock(&fn->instance->mtx);
return *out_value != NULL; return *out_value != NULL;
} }
Environment frame; Environment frame;
if (!environment_create(&frame, fn->v.f.v.f.closure)) { if (!environment_create(&frame, fn->v.f.v.f.closure)) {
pthread_mutex_unlock(&fn->instance->mtx);
return false; return false;
} }
@@ -2014,7 +1970,6 @@ bool dcfg_call_function(
if (argc != nform) { if (argc != nform) {
strcpy(fn->instance->last_error, "Invalid argument count"); strcpy(fn->instance->last_error, "Invalid argument count");
environment_destroy(&frame, false); environment_destroy(&frame, false);
pthread_mutex_unlock(&fn->instance->mtx);
return false; return false;
} }
for (size_t i = 0; i < nform; i++) { for (size_t i = 0; i < nform; i++) {
@@ -2024,18 +1979,13 @@ bool dcfg_call_function(
bool ok = dcfg_Value_evaluate_in_env(fn->v.f.v.f.body, &frame, out_value); bool ok = dcfg_Value_evaluate_in_env(fn->v.f.v.f.body, &frame, out_value);
environment_destroy(&frame, false); environment_destroy(&frame, false);
pthread_mutex_unlock(&fn->instance->mtx);
return ok; return ok;
} }
bool dcfg_Value_evaluate(dcfg_Value *value, dcfg_Value **out_value) bool dcfg_Value_evaluate(dcfg_Value *value, dcfg_Value **out_value)
{ {
bool ret; bool ret;
pthread_mutex_lock(&value->instance->mtx); ret = dcfg_Value_evaluate_in_env(value, NULL, out_value);
{
ret = dcfg_Value_evaluate_in_env(value, NULL, out_value);
}
pthread_mutex_unlock(&value->instance->mtx);
return ret; return ret;
} }