tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Corosync on NetBSD

Hi all,

I tried to run corosync again on NetBSD 6 BETA. The build errors are
the same, and also it does nothing than utilizing 100% CPU. Luckily,
gdb works in live mode with threads now, and shows this:

(gdb) info th
  Id   Target Id         Frame
  5    LWP 1             0x00007f7ff68071e0 in ?? () from
  4    LWP 2             0x00007f7ff6476e5a in ___lwp_park50 () from
  3    LWP 3             0x00007f7ff643907a in poll () from /usr/lib/
  2    LWP 4             0x00007f7ff6476e5a in ___lwp_park50 () from
* 1    LWP 0             0x00007f7ff6476e5a in ___lwp_park50 () from
(gdb) thr 5
[Switching to thread 5 (LWP 1)]
#0  0x00007f7ff68071e0 in ?? () from /usr/lib/
(gdb) bt
#0  0x00007f7ff68071e0 in ?? () from /usr/lib/
#1  0x00007f7ff68075e8 in ?? () from /usr/lib/
#2  0x0000000000409947 in corosync_timer_add_duration
(nanosec_duration=1500000000, data=0x0, timer_fn=0x4049b0
    handle=0x615518) at timer.c:221
#3  0x000000000040575c in corosync_totem_stats_init () at main.c:820
#4  main_service_ready () at main.c:1410
#5  0x00007f7ff781788b in main_iface_change_fn
(context=0x7f7ff7b3c000, iface_addr=<optimized out>, iface_no=0) at
#6  0x00007f7ff7809473 in timer_function_netif_check_timeout
(data=0x7f7ff7384000) at totemudp.c:1388
#7  0x00007f7ff7807780 in timerlist_expire (timerlist=0x7f7ff7b1b0d8)
at tlist.h:309
#8  poll_run (handle=150346236434579456) at coropoll.c:526
#9  0x000000000040775a in main (argc=<optimized out>, argv=<optimized
out>, envp=<optimized out>) at main.c:1846

As you can see, it jumps somewhere in libpthread from the
corosync_timer_add_duration() function, resulting in an infinite loop.
As a hack, I just commented everything out:

int corosync_timer_add_duration (
        unsigned long long nanosec_duration,
        void *data,
        void (*timer_fn) (void *data),
        timer_handle *handle)
        int res;
        int unlock;

        if (pthread_equal (pthread_self(), expiry_thread) != 0) {
                unlock = 0;
        } else {
                unlock = 1;
                pthread_mutex_lock (&timer_mutex);

        res = timerlist_add_duration (

        if (unlock) {
                pthread_mutex_unlock (&timer_mutex);

        pthread_kill (expiry_thread, SIGUSR1);

        return (res);

 return 0;

Doing this, the corosync service successfully starts and interacts
with its control tools.

Does anybody have an idea what could be wrong with the code obove?


Home | Main Index | Thread Index | Old Index