diff --git a/src/core/lib/profiling/basic_timers.c b/src/core/lib/profiling/basic_timers.c
index 0a4ae3057adda7c89af8fac8b45309c3d13ed3a5..50082cd7ee40329f1c03402b7bab4057cf7473a3 100644
--- a/src/core/lib/profiling/basic_timers.c
+++ b/src/core/lib/profiling/basic_timers.c
@@ -173,7 +173,7 @@ static void flush_logs(gpr_timer_log_list *list) {
   gpr_timer_log *log;
   while ((log = timer_log_pop_front(list)) != NULL) {
     write_log(log);
-    gpr_free(log);
+    free(log);
   }
 }
 
@@ -208,7 +208,8 @@ static void init_output() {
 }
 
 static void rotate_log() {
-  gpr_timer_log *new = gpr_malloc(sizeof(*new));
+  /* Using malloc here, as this code could end up being called by gpr_malloc */
+  gpr_timer_log *new = malloc(sizeof(*new));
   gpr_once_init(&g_once_init, init_output);
   new->num_entries = 0;
   pthread_mutex_lock(&g_mu);