[sheepdog] `tid_max` in lib/work.c need to be initialized

Jinzhi Chen nxtjinzhi at gmail.com
Tue Oct 28 10:29:24 CET 2014


hi,

I'm currently using sheepodg v0.8.3, configure with --enable-debug & start
sheep with journal directory.


during `journal_file_init` progress, journal thread is created.
but the `tid_max` is not initialized until `wq_trace_init` is called,
which is called just after journal init progress.
Thus the journal thread enter into infinite loop when trace is enabled.
(below is related code)


static void trace_set_tid_map(int tid)
{
        sd_mutex_lock(&tid_map_lock);
        if (tid > tid_max) {
                size_t old_tid_max = tid_max;

                /* enlarge bitmap size */
                ## because tid_max is not initialized (which is 0), the
journal thread enter into loop
                while (tid > tid_max)
                        tid_max *= 2;

                tid_map = alloc_bitmap(tid_map, old_tid_max, tid_max);
        }
        set_bit(tid, tid_map);
        sd_mutex_unlock(&tid_map_lock);
}

I think `tid_max` should be initialized to TID_MAX_DEFAULT in to avoid
issue.
thus, change lib/work.c

-static size_t tid_max;
+static size_t tid_max = TID_MAX_DEFAULT

& delete related code in wq_trace_init

Correct me if I'm wrong.


Thanks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.wpkg.org/pipermail/sheepdog/attachments/20141028/7b7182db/attachment-0003.html>


More information about the sheepdog mailing list