summaryrefslogtreecommitdiffstats
path: root/include/opentracing-c-wrapper/dbg_malloc.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/opentracing-c-wrapper/dbg_malloc.h')
-rw-r--r--include/opentracing-c-wrapper/dbg_malloc.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/include/opentracing-c-wrapper/dbg_malloc.h b/include/opentracing-c-wrapper/dbg_malloc.h
new file mode 100644
index 0000000..4af56ca
--- /dev/null
+++ b/include/opentracing-c-wrapper/dbg_malloc.h
@@ -0,0 +1,86 @@
+/***
+ * Copyright 2020 HAProxy Technologies
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef OPENTRACING_C_WRAPPER_DBG_MALLOC_H
+#define OPENTRACING_C_WRAPPER_DBG_MALLOC_H
+
+__CPLUSPLUS_DECL_BEGIN
+
+#ifdef OTC_DBG_MEM
+
+#define OTC_DBG_MALLOC(s) otc_dbg_malloc(__func__, __LINE__, (s))
+#define OTC_DBG_CALLOC(n,e) otc_dbg_calloc(__func__, __LINE__, (n), (e))
+#define OTC_DBG_REALLOC(p,s) otc_dbg_realloc(__func__, __LINE__, (p), (s))
+#define OTC_DBG_FREE(p) otc_dbg_free(__func__, __LINE__, (p))
+#define OTC_DBG_STRDUP(s) otc_dbg_strdup(__func__, __LINE__, (s))
+#define OTC_DBG_STRNDUP(s,n) otc_dbg_strndup(__func__, __LINE__, (s), (n))
+#define OTC_DBG_MEMDUP(s,n) otc_dbg_memdup(__func__, __LINE__, (s), (n))
+#define OTC_DBG_MEMINFO() otc_dbg_mem_info()
+
+
+struct otc_dbg_mem_data {
+ const void *ptr;
+ size_t size;
+ char func[63];
+ bool used;
+} __attribute__((packed));
+
+struct otc_dbg_mem {
+ struct otc_dbg_mem_data *data;
+ size_t count;
+ size_t unused;
+ size_t reused;
+ uint64_t size;
+ uint64_t op_cnt[4];
+ uint8_t level;
+ pthread_mutex_t mutex;
+};
+
+
+void *otc_dbg_malloc(const char *func, int line, size_t size);
+void *otc_dbg_calloc(const char *func, int line, size_t nelem, size_t elsize);
+void *otc_dbg_realloc(const char *func, int line, void *ptr, size_t size);
+void otc_dbg_free(const char *func, int line, void *ptr);
+char *otc_dbg_strdup(const char *func, int line, const char *s);
+char *otc_dbg_strndup(const char *func, int line, const char *s, size_t size);
+void *otc_dbg_memdup(const char *func, int line, const void *s, size_t size);
+int otc_dbg_mem_init(struct otc_dbg_mem *mem, struct otc_dbg_mem_data *data, size_t count, uint8_t level);
+void otc_dbg_mem_disable(void);
+void otc_dbg_mem_info(void);
+
+#else
+
+#define OTC_DBG_MALLOC(s) malloc(s)
+#define OTC_DBG_CALLOC(n,e) calloc((n), (e))
+#define OTC_DBG_REALLOC(p,s) realloc((p), (s))
+#define OTC_DBG_FREE(p) free(p)
+#define OTC_DBG_STRDUP(s) strdup(s)
+#define OTC_DBG_STRNDUP(s,n) strndup((s), (n))
+#define OTC_DBG_MEMDUP(s,n) mem_dup((s), (n))
+#define OTC_DBG_MEMINFO() while (0)
+
+#endif /* OTC_DBG_MEM */
+
+__CPLUSPLUS_DECL_END
+#endif /* OPENTRACING_C_WRAPPER_DBG_MALLOC_H */
+
+/*
+ * Local variables:
+ * c-indent-level: 8
+ * c-basic-offset: 8
+ * End:
+ *
+ * vi: noexpandtab shiftwidth=8 tabstop=8
+ */