From eda8d39fd0ee389c53753536c7071c5dbed03ef1 Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Tue, 5 Jan 2016 03:20:36 +0000 Subject: [PATCH] Implement support for the API shared locking implementation. --- packages/base/any/onlp/builds/onlp/Makefile | 3 + .../any/onlp/src/onlp/module/src/onlp_locks.c | 55 ++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/packages/base/any/onlp/builds/onlp/Makefile b/packages/base/any/onlp/builds/onlp/Makefile index 5637f145..d18020ec 100644 --- a/packages/base/any/onlp/builds/onlp/Makefile +++ b/packages/base/any/onlp/builds/onlp/Makefile @@ -48,6 +48,9 @@ include $(BUILDER)/so.mk GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_CTOR_DTOR=1 GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MODULES_INIT=1 +GLOBAL_CFLAGS += -DONLP_CONFIG_API_LOCK_GLOBAL_SHARED=1 +GLOBAL_CFLAGS += -DONLP_CONFIG_INCLUDE_SHLOCK_GLOBAL_INIT=1 + GLOBAL_CFLAGS += -fPIC GLOBAL_LINK_LIBS += -lpthread $(LIBONLP_PLATFORM) $(LIBONLP_PLATFORM_DEFAULTS) diff --git a/packages/base/any/onlp/src/onlp/module/src/onlp_locks.c b/packages/base/any/onlp/src/onlp/module/src/onlp_locks.c index c87d894d..7e48c17d 100644 --- a/packages/base/any/onlp/src/onlp/module/src/onlp_locks.c +++ b/packages/base/any/onlp/src/onlp/module/src/onlp_locks.c @@ -62,9 +62,62 @@ onlp_api_unlock(void) } #else -#error GLOBAL_SHARED API Lock support is not yet implemented. + +#include + +void +onlp_api_lock_init(void) +{ + onlp_shlock_global_init(); +} + +void +onlp_api_lock(const char* api) +{ + onlp_shlock_global_take(); +} +void +onlp_api_unlock(void) +{ + onlp_shlock_global_give(); +} + #endif + +/* + * This function will perform a sanity test on the API locking implementation. + */ +#include + +static int +onlp_api_lock_test_locked__(void) +{ + static int counter__ = 1; + int readback = 0; + const char* fname = "/tmp/onlp_api_lock_test"; + + fclose(fopen(fname, "w")); + onlp_file_write_int(counter__, fname, NULL); + onlp_file_read_int(&readback, fname, NULL); + if(readback != counter__) { + fprintf(stderr, "API LOCK TEST: write=%d read=%d", counter__, readback); + return -1; + } + counter__++; + return 0; +} +ONLP_LOCKED_API0(onlp_api_lock_test); + +#else + +int +onlp_api_lock_test(void) +{ + fprintf(stderr, "API Locking support not available in this build.\n"); + return 2; +} + #endif /* ONLP_CONFIG_INCLUDE_API_LOCK */