<div dir="ltr"><div><div>Sorry, previous patch introduce too many changes.</div><div><br></div><div>when journal thread init before the initialization of trace,</div><div>it enter into loop (using uninitailized `tid_max`)with</div><div>--debug-enable configured. we need to initialize trace before</div><div> journal thread init.</div><div>this patch extrace `wq_trace_init` from `init_work_queue` and</div><div>call it in the main() function just before the initialization</div><div>of journal file.</div><div><br></div><div>Signed-off-by: Jinzhi Chen <<a href="mailto:nxtjinzhi@gmail.com">nxtjinzhi@gmail.com</a>></div><div>---</div><div> include/work.h |    1 +</div><div> lib/work.c     |    8 ++------</div><div> sheep/sheep.c  |    7 +++++++</div><div> 3 files changed, 10 insertions(+), 6 deletions(-)</div><div><br></div><div>diff --git a/include/work.h b/include/work.h</div><div>index b2fa0cf..c2008ba 100644</div><div>--- a/include/work.h</div><div>+++ b/include/work.h</div><div>@@ -63,6 +63,7 @@ struct work_queue *create_work_queue(const char *name, enum wq_thread_control);</div><div> struct work_queue *create_ordered_work_queue(const char *name);</div><div> void queue_work(struct work_queue *q, struct work *work);</div><div> bool work_queue_empty(struct work_queue *q);</div><div>+int wq_trace_init(void);</div><div> </div><div> #ifdef HAVE_TRACE</div><div> void suspend_worker_threads(void);</div><div>diff --git a/lib/work.c b/lib/work.c</div><div>index 7e2cd79..95953e4 100644</div><div>--- a/lib/work.c</div><div>+++ b/lib/work.c</div><div>@@ -134,7 +134,7 @@ static void suspend(int num)</div><div> <span class="" style="white-space:pre"> </span>eventfd_xwrite(ack_efd, 1); /* ack of resume */</div><div> }</div><div> </div><div>-static int wq_trace_init(void)</div><div>+int wq_trace_init(void)</div><div> {</div><div> <span class="" style="white-space:pre">        </span>tid_max = TID_MAX_DEFAULT;</div><div> <span class="" style="white-space:pre">       </span>tid_map = alloc_bitmap(NULL, 0, tid_max);</div><div>@@ -180,7 +180,7 @@ static void trace_clear_tid_map(int tid)</div><div> </div><div> #else</div><div> </div><div>-static inline int wq_trace_init(void) { return 0; }</div><div>+inline int wq_trace_init(void) { return 0; }</div><div> static inline void trace_set_tid_map(int tid) {}</div><div> static inline void trace_clear_tid_map(int tid) {}</div><div> </div><div>@@ -364,10 +364,6 @@ int init_work_queue(size_t (*get_nr_nodes)(void))</div><div> <span class="" style="white-space:pre">            </span>return -1;</div><div> <span class="" style="white-space:pre">       </span>}</div><div> </div><div>-<span class="" style="white-space:pre">        </span>ret = wq_trace_init();</div><div>-<span class="" style="white-space:pre">    </span>if (ret < 0)</div><div>-<span class="" style="white-space:pre">           </span>return ret;</div><div>-</div><div> <span class="" style="white-space:pre">      </span>ret = register_event(efd, worker_thread_request_done, NULL);</div><div> <span class="" style="white-space:pre">     </span>if (ret) {</div><div> <span class="" style="white-space:pre">               </span>sd_err("failed to register event fd %m");</div><div>diff --git a/sheep/sheep.c b/sheep/sheep.c</div><div>index 2e91d0f..ef45a33 100644</div><div>--- a/sheep/sheep.c</div><div>+++ b/sheep/sheep.c</div><div>@@ -885,6 +885,13 @@ int main(int argc, char **argv)</div><div> <span class="" style="white-space:pre">          </span>goto cleanup_log;</div><div> <span class="" style="white-space:pre">        </span>}</div><div> </div><div>+<span class="" style="white-space:pre">        </span>/* We should init trace for work queue before journal init */</div><div>+<span class="" style="white-space:pre">     </span>ret = wq_trace_init();</div><div>+<span class="" style="white-space:pre">    </span>if (ret) {</div><div>+<span class="" style="white-space:pre">                </span>sd_err("failed to init trace for work queue");</div><div>+<span class="" style="white-space:pre">          </span>goto cleanup_log;</div><div>+<span class="" style="white-space:pre"> </span>}</div><div>+</div><div> <span class="" style="white-space:pre">        </span>/* We should init journal file before backend init */</div><div> <span class="" style="white-space:pre">    </span>if (uatomic_is_true(&sys->use_journal)) {</div><div> <span class="" style="white-space:pre">         </span>if (!strlen(jpath))</div><div>-- </div><div>1.7.9.5</div></div><div><br></div></div>