From 19c38f7922f82001a8ad0183bdb8af868c46d111 Mon Sep 17 00:00:00 2001
From: Lauri Kasanen <cand@gmx.com>
Date: Fri, 23 Mar 2012 20:50:32 +0200
Subject: [PATCH 6/7] Move sequential clock init to its own function

If the memory were allocated in a thread, it may happen too late.

Signed-off-by: Lauri Kasanen <cand@gmx.com>
---
 src/include/mk_clock.h |    1 +
 src/mk_clock.c         |   23 ++++++++++++++---------
 src/monkey.c           |    3 +++
 3 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/src/include/mk_clock.h b/src/include/mk_clock.h
index ebef5b1..cf50190 100644
--- a/src/include/mk_clock.h
+++ b/src/include/mk_clock.h
@@ -39,5 +39,6 @@ extern mk_pointer header_current_time;
 
 void *mk_clock_worker_init(void *args);
 void mk_clock_set_time(void);
+void mk_clock_sequential_init();
 
 #endif
diff --git a/src/mk_clock.c b/src/mk_clock.c
index dc43836..39d36c3 100644
--- a/src/mk_clock.c
+++ b/src/mk_clock.c
@@ -84,15 +84,6 @@ void *mk_clock_worker_init(void *args)
 
     mk_utils_worker_rename("monkey: clock");
 
-    /* Time when monkey was started */
-    monkey_init_time = time(NULL);
-
-    header_time_buffers[0] = mk_mem_malloc_z(HEADER_TIME_BUFFER_SIZE);
-    header_time_buffers[1] = mk_mem_malloc_z(HEADER_TIME_BUFFER_SIZE);
-
-    log_time_buffers[0] = mk_mem_malloc_z(LOG_TIME_BUFFER_SIZE);
-    log_time_buffers[1] = mk_mem_malloc_z(LOG_TIME_BUFFER_SIZE);
-
     while (1) {
         cur_time = time(NULL);
 
@@ -104,3 +95,17 @@ void *mk_clock_worker_init(void *args)
         sleep(1);
     }
 }
+
+/* This function must be called before any threads are created */
+void mk_clock_sequential_init()
+{
+    /* Time when monkey was started */
+    monkey_init_time = time(NULL);
+
+    header_time_buffers[0] = mk_mem_malloc_z(HEADER_TIME_BUFFER_SIZE);
+    header_time_buffers[1] = mk_mem_malloc_z(HEADER_TIME_BUFFER_SIZE);
+
+    log_time_buffers[0] = mk_mem_malloc_z(LOG_TIME_BUFFER_SIZE);
+    log_time_buffers[1] = mk_mem_malloc_z(LOG_TIME_BUFFER_SIZE);
+
+}
diff --git a/src/monkey.c b/src/monkey.c
index ec8a9f3..fee2551 100644
--- a/src/monkey.c
+++ b/src/monkey.c
@@ -165,6 +165,9 @@ int main(int argc, char **argv)
     /* Register PID of Monkey */
     mk_utils_register_pid();
 
+    /* Clock init that must happen before starting threads */
+    mk_clock_sequential_init();
+
     /* Workers: logger and clock */
     mk_utils_worker_spawn((void *) mk_clock_worker_init);
 
-- 
1.7.2.1

