Fix: statedump hang/too early completion due to logic error
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 9 Jan 2013 17:40:55 +0000 (12:40 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 9 Jan 2013 17:40:55 +0000 (12:40 -0500)
The previous "Fix: statedump hang due to incorrect wait/wakeup use" was
not actually fixing the real problem.

The issue is that we should pass the expected condition to wait_event()
rather than its contrary.

This bug has been sitting there for a while. I suspect that a recent
change in the Linux scheduler behavior for newly spawned worker threads
might have contributed to trigger the hang more reliably.

The effects of this bugs are:
- possible hang of the lttng-sessiond (within the kernel) at tracing
  start,
- the statedump end event is traced before all worker threads have
  actually completed, which can confuse LTTng viewer state systems.

Reported-by: Phil Wilshire <sysdcs@gmail.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
lttng-statedump-impl.c

index 4832c876d8eba0bc74641e65ba9c38d09c4eb6cc..fc9dbf686aa67095195487c528fe15a56d927805 100644 (file)
@@ -369,7 +369,7 @@ int do_lttng_statedump(struct lttng_session *session)
                schedule_delayed_work_on(cpu, &cpu_work[cpu], 0);
        }
        /* Wait for all threads to run */
-       wait_event(statedump_wq, (atomic_read(&kernel_threads_to_run) != 0));
+       __wait_event(statedump_wq, (atomic_read(&kernel_threads_to_run) == 0));
        put_online_cpus();
        /* Our work is done */
        printk(KERN_DEBUG "LTT state dump end\n");
This page took 0.026272 seconds and 4 git commands to generate.