Fix: remove break in epoll loop of apps. thread
authorDavid Goulet <dgoulet@efficios.com>
Wed, 18 Dec 2013 23:34:44 +0000 (18:34 -0500)
committerDavid Goulet <dgoulet@efficios.com>
Thu, 19 Dec 2013 17:29:54 +0000 (12:29 -0500)
In *heavy* stress test with a large number of applications (> 7000 a
second), the manage application thread could starve the delete process
by breaking just after adding an application to the poll set.

Also, we've observed that somehow the application unregister process is
not done on most of the application by breaking the loop at each delete
from the poll set. We are still uncertain why but one theory is that
epoll detects that an I/O operation is ready (here a shutdown) and an
other subsystem of the session daemon uses that socket for I/O which
flags the poll event as "has been taken care of" thus the loop never
sees it because of that break.

The notify socket thread does not use a break between poll operation
which leads us to that conclusion with the manage apps thread.

We don't use epoll with edge-trigger thus a POLLERR/POLLHUP should
always be return as long as it's not taken care of.

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
src/bin/lttng-sessiond/main.c

index a81a9a83fb77a8b0169dad5c0550772a6e01beb9..bdd48c24cb2ca6edbcc8ab7f2c6a898881f7fbb5 100644 (file)
@@ -1309,10 +1309,6 @@ static void *thread_manage_apps(void *data)
                                        }
 
                                        DBG("Apps with sock %d added to poll set", sock);
-
-                                       health_code_update();
-
-                                       break;
                                }
                        } else {
                                /*
@@ -1328,7 +1324,6 @@ static void *thread_manage_apps(void *data)
 
                                        /* Socket closed on remote end. */
                                        ust_app_unregister(pollfd);
-                                       break;
                                }
                        }
 
This page took 0.028012 seconds and 4 git commands to generate.