From 2ef04bad714981349b54fea4af9a629bc0a20c18 Mon Sep 17 00:00:00 2001 From: Glauber Costa <glommer@cloudius-systems.com> Date: Mon, 12 May 2014 16:06:36 +0400 Subject: [PATCH] shrinker: export to C Export the shrinker interface to C users. Signed-off-by: Glauber Costa <glommer@cloudius-systems.com> Reviewed-by: Raphael S. Carvalho <raphaelsc@cloudius-systems.com> Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com> --- core/mempool.cc | 7 +++++++ include/osv/shrinker.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 include/osv/shrinker.h diff --git a/core/mempool.cc b/core/mempool.cc index 919a9a67c..04a1adb09 100644 --- a/core/mempool.cc +++ b/core/mempool.cc @@ -28,6 +28,7 @@ #include <algorithm> #include <osv/prio.hh> #include <stdlib.h> +#include <osv/shrinker.h> #include "java/jvm_balloon.hh" TRACEPOINT(trace_memory_malloc, "buf=%p, len=%d", void *, size_t); @@ -629,6 +630,12 @@ shrinker::shrinker(std::string name) } } +void *osv_register_shrinker(const char *name, + size_t (*func)(size_t target, bool hard)) +{ + return reinterpret_cast<void *>(new c_shrinker(name, func)); +} + bool reclaimer_waiters::wake_waiters() { bool woken = false; diff --git a/include/osv/shrinker.h b/include/osv/shrinker.h new file mode 100644 index 000000000..bac7d242b --- /dev/null +++ b/include/osv/shrinker.h @@ -0,0 +1,28 @@ +#ifndef SHRINKER_H_ +#define SHRINKER_H_ + +#ifdef __cplusplus + +#include <osv/mempool.hh> + +class c_shrinker : public memory::shrinker { +public: + explicit c_shrinker(const char *name, + size_t (*func)(size_t target, bool hard)) : + memory::shrinker(name), _func(func) {} + size_t request_memory(size_t s, bool hard) { return _func(s, hard); } +private: + size_t (*_func)(size_t target, bool hard); +}; + + +extern "C" +void *osv_register_shrinker(const char *name, + size_t (*func)(size_t target, bool hard)); +#else +#include <stdbool.h> +void *osv_register_shrinker(const char *name, + size_t (*func)(size_t target, bool hard)); +#endif + +#endif -- GitLab