Jelajahi Sumber

mem: core api for pkg management

Daniel-Constantin Mierla 10 tahun lalu
induk
melakukan
28bf5c457f
2 mengubah file dengan 145 tambahan dan 0 penghapusan
  1. 95 0
      mem/pkg.c
  2. 50 0
      mem/pkg.h

+ 95 - 0
mem/pkg.c

@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2015 Daniel-Constantin Mierla (asipto.com)
+ *
+ * This file is part of Kamailio, a free SIP server.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "../dprint.h"
+
+#include "pkg.h"
+
+#include "memcore.h"
+
+sr_pkg_api_t _pkg_root = {0};
+
+/**
+ *
+ */
+int pkg_init_api(sr_pkg_api_t *ap)
+{
+	memset(&_pkg_root, 0, sizeof(sr_pkg_api_t));
+	_pkg_root.mname      = ap->mname;
+	_pkg_root.mem_pool   = ap->mem_pool;
+	_pkg_root.mem_block  = ap->mem_block;
+	_pkg_root.xmalloc    = ap->xmalloc;
+	_pkg_root.xfree      = ap->xfree;
+	_pkg_root.xrealloc   = ap->xrealloc;
+	_pkg_root.xstatus    = ap->xstatus;
+	_pkg_root.xinfo      = ap->xinfo;
+	_pkg_root.xavailable = ap->xavailable;
+	_pkg_root.xsums      = ap->xsums;
+	_pkg_root.xdestroy   = ap->xdestroy;
+	return 0;
+}
+
+/**
+ *
+ */
+int pkg_init_manager(char *name)
+{
+	if(strcmp(name, "fm")==0
+			|| strcmp(name, "f_malloc")==0
+			|| strcmp(name, "fmalloc")==0) {
+		/*fast malloc*/
+		return fm_malloc_init_pkg_manager();
+	} else if(strcmp(name, "qm")==0
+			|| strcmp(name, "q_malloc")==0
+			|| strcmp(name, "qmalloc")==0) {
+		/*quick malloc*/
+		return qm_malloc_init_pkg_manager();
+	} else if(strcmp(name, "sm")==0) {
+		/*system malloc*/
+	} else {
+		/*custom malloc - module*/
+	}
+	return -1;
+}
+
+
+/**
+ *
+ */
+void pkg_destroy_manager(void)
+{
+	if(_pkg_root.xdestroy) {
+		LM_DBG("destroying memory manager: %s\n",
+				(_pkg_root.mname)?_pkg_root.mname:"unknown");
+		_pkg_root.xdestroy();
+	}
+}
+
+/**
+ *
+ */
+void pkg_print_manager(void)
+{
+	LM_DBG("pkg - using memory manager: %s\n",
+			(_pkg_root.mname)?_pkg_root.mname:"unknown");
+}

+ 50 - 0
mem/pkg.h

@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2015 Daniel-Constantin Mierla (asipto.com)
+ *
+ * This file is part of Kamailio, a free SIP server.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+
+#ifndef _sr_pkg_h_
+#define _sr_pkg_h_
+
+#include "memapi.h"
+
+extern sr_pkg_api_t _pkg_root;
+
+#ifdef DBG_SR_MEMORY
+#	define pkg_malloc(s)      _pkg_root.xmalloc(_pkg_root.mem_block, (s), _SRC_LOC_, \
+				_SRC_FUNCTION_, _SRC_LINE_)
+#	define pkg_free(p)        _pkg_root.xfree(_pkg_root.mem_block, (p), _SRC_LOC_, \
+				_SRC_FUNCTION_, _SRC_LINE_)
+#	define pkg_realloc(p, s)  _pkg_root.xrealloc(_pkg_root.mem_block, (p), (s), \
+				_SRC_LOC_, _SRC_FUNCTION_, _SRC_LINE_)
+#else
+#	define pkg_malloc(s)      _pkg_root.xmalloc(_pkg_root.mem_block, (s))
+#	define pkg_realloc(p, s)  _pkg_root.xrealloc(_pkg_root.mem_block, (p), (s))
+#	define pkg_free(p)        _pkg_root.xfree(_pkg_root.mem_block, (p))
+#endif
+
+#	define pkg_status()    _pkg_root.xstatus(_pkg_root.mem_block)
+#	define pkg_info(mi)    _pkg_root.xinfo(_pkg_root.mem_block, mi)
+#	define pkg_available() _pkg_root.xavailable(_pkg_root.mem_block)
+#	define pkg_sums()      _pkg_root.xsums(_pkg_root.mem_block)
+
+int pkg_init_api(sr_pkg_api_t *ap);
+int pkg_init_manager(char *name);
+void pkg_destroy_manager(void);
+void pkg_print_manager(void);
+
+#endif