diff options
author | Amit Pundir <amit.pundir@linaro.org> | 2012-04-17 15:05:59 +0530 |
---|---|---|
committer | Amit Pundir <amit.pundir@linaro.org> | 2012-04-17 15:05:59 +0530 |
commit | 96a11754a6950bfe50784c0877cb64b1ed7d2b18 (patch) | |
tree | b977131bbbb4c3bd8ade370aab2e4fc913440c04 /plpa-1.3.2/src/libplpa/plpa_runtime.c | |
download | android_external_htop-96a11754a6950bfe50784c0877cb64b1ed7d2b18.tar.gz android_external_htop-96a11754a6950bfe50784c0877cb64b1ed7d2b18.tar.bz2 android_external_htop-96a11754a6950bfe50784c0877cb64b1ed7d2b18.zip |
add original htop code
htop-0.9 downloaded from http://archive.ubuntu.com/ubuntu/pool/universe/h/htop/htop_0.9.orig.tar.gz
Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
Diffstat (limited to 'plpa-1.3.2/src/libplpa/plpa_runtime.c')
-rw-r--r-- | plpa-1.3.2/src/libplpa/plpa_runtime.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/plpa-1.3.2/src/libplpa/plpa_runtime.c b/plpa-1.3.2/src/libplpa/plpa_runtime.c new file mode 100644 index 0000000..97f1549 --- /dev/null +++ b/plpa-1.3.2/src/libplpa/plpa_runtime.c @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2007 Cisco Systems, Inc. All rights reserved. + */ + +#include "plpa_config.h" +#include "plpa.h" +#include "plpa_internal.h" + +#include <errno.h> +#include <pthread.h> + +/* Global variables */ +int PLPA_NAME(initialized) = 0; + +/* Local variables */ +static int refcount = 0; +static pthread_mutex_t mutex; + + +/* Central clearing point for all parts of PLPA that need to be + initialized. It is erroneous to call this function by more than + one thread simultaneously. */ +int PLPA_NAME(init)(void) +{ + int ret; + + /* If we're already initialized, simply increase the refcount */ + if (PLPA_NAME(initialized)) { + pthread_mutex_lock(&mutex); + ++refcount; + pthread_mutex_unlock(&mutex); + return 0; + } + + /* Otherwise, initialize all the sybsystems */ + if (0 != (ret = pthread_mutex_init(&mutex, NULL)) || + 0 != (ret = PLPA_NAME(api_probe_init)()) || + 0 != (ret = PLPA_NAME(set_cache_behavior)(PLPA_NAME_CAPS(CACHE_USE)))) { + return ret; + } + + PLPA_NAME(initialized) = 1; + refcount = 1; + return 0; +} + + +/* Central clearing point for all parts of PLPA that need to be + shutdown. */ +int PLPA_NAME(finalize)(void) +{ + int val; + + /* If we're not initialized, return an error */ + if (!PLPA_NAME(initialized)) { + return ENOENT; + } + + /* Decrement and check the refcount. If it's nonzero, then simply + return success. */ + pthread_mutex_lock(&mutex); + val = --refcount; + pthread_mutex_unlock(&mutex); + if (0 != val) { + return 0; + } + + /* Ok, we're the last one. Cleanup. */ + PLPA_NAME(set_cache_behavior)(PLPA_NAME_CAPS(CACHE_IGNORE)); + pthread_mutex_destroy(&mutex); + PLPA_NAME(initialized) = 0; + return 0; +} |