nghttp2_mem.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /*
  2. * Copyright (C) 2015-2018 Alibaba Group Holding Limited
  3. */
  4. #include <string.h>
  5. #include "nghttp2_mem.h"
  6. #ifdef INFRA_MEM_STATS
  7. #include "infra_mem_stats.h"
  8. #endif
  9. extern void *HAL_Malloc(uint32_t size);
  10. extern void *HAL_Realloc(void *ptr, uint32_t size);
  11. extern void HAL_Free(void *ptr);
  12. static void *default_malloc(size_t size, void *mem_user_data)
  13. {
  14. (void)mem_user_data;
  15. #ifdef INFRA_MEM_STATS
  16. return LITE_malloc(size, MEM_MAGIC, "nghttp2");
  17. #else
  18. return HAL_Malloc(size);
  19. #endif
  20. }
  21. static void default_free(void *ptr, void *mem_user_data)
  22. {
  23. (void)mem_user_data;
  24. if (ptr != NULL) {
  25. #ifdef INFRA_MEM_STATS
  26. LITE_free(ptr);
  27. #else
  28. HAL_Free((void *)ptr);
  29. ptr = NULL;
  30. #endif
  31. }
  32. }
  33. static void *default_calloc(size_t nmemb, size_t size, void *mem_user_data)
  34. {
  35. /* (void)mem_user_data; */
  36. #ifdef INFRA_MEM_STATS
  37. return LITE_calloc(nmemb, size, MEM_MAGIC, "nghttp2");
  38. #else
  39. void *ptr = HAL_Malloc(nmemb * size);
  40. if (ptr != NULL) {
  41. memset(ptr, 0, nmemb * size);
  42. }
  43. return ptr;
  44. #endif
  45. }
  46. static void *default_realloc(void *ptr, size_t size, void *mem_user_data)
  47. {
  48. (void)mem_user_data;
  49. #ifdef INFRA_MEM_STATS
  50. return LITE_realloc(ptr, size, MEM_MAGIC, "nghttp2");
  51. #else
  52. return HAL_Realloc(ptr, size);
  53. #endif
  54. }
  55. static nghttp2_mem mem_default = {NULL, default_malloc, default_free,
  56. default_calloc, default_realloc
  57. };
  58. nghttp2_mem *nghttp2_mem_default(void)
  59. {
  60. return &mem_default;
  61. }
  62. void *nghttp2_mem_malloc(nghttp2_mem *mem, size_t size)
  63. {
  64. return mem->malloc(size, mem->mem_user_data);
  65. }
  66. void nghttp2_mem_free(nghttp2_mem *mem, void *ptr)
  67. {
  68. mem->free(ptr, mem->mem_user_data);
  69. }
  70. void nghttp2_mem_free2(nghttp2_free free_func, void *ptr, void *mem_user_data)
  71. {
  72. free_func(ptr, mem_user_data);
  73. }
  74. void *nghttp2_mem_calloc(nghttp2_mem *mem, size_t nmemb, size_t size)
  75. {
  76. return mem->calloc(nmemb, size, mem->mem_user_data);
  77. }
  78. void *nghttp2_mem_realloc(nghttp2_mem *mem, void *ptr, size_t size)
  79. {
  80. return mem->realloc(ptr, size, mem->mem_user_data);
  81. }