Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1
syslog-ng
syslog-ng-logwriter-100-CPU-usage.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File syslog-ng-logwriter-100-CPU-usage.diff of Package syslog-ng
From ab0b9b75a2f69e9e66fe5727fe6c5a4ca4acac99 Mon Sep 17 00:00:00 2001 From: Balazs Scheidler <bazsi@balabit.hu> Date: Mon, 5 Oct 2009 12:33:07 +0200 Subject: [PATCH 2/2] [logwriter] fixed a 100% CPU usage if a udp destination is down Sometimes when a UDP destination is down we get POLLERR from poll. This was not always propagated to the dispatch handler by GLib if pollfd.events was 0. This patch makes sure that at least G_IO_ERR is present in the "events" field in logreader/logwriter. Reported-By: Sandor Geller --- src/logreader.c | 4 ++-- src/logwriter.c | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/logreader.c b/src/logreader.c index 9ca53a0..58ee2aa 100644 --- a/src/logreader.c +++ b/src/logreader.c @@ -62,7 +62,7 @@ log_reader_fd_prepare(GSource *source, #endif self->pollfd.revents = 0; - self->pollfd.events = 0; + self->pollfd.events = G_IO_ERR; /* never indicate readability if flow control prevents us from sending messages */ @@ -83,7 +83,7 @@ log_reader_fd_prepare(GSource *source, return FALSE; } - self->pollfd.events = G_IO_IN; + self->pollfd.events |= G_IO_IN; return FALSE; } diff --git a/src/logwriter.c b/src/logwriter.c index 7a5fcf7..79e1a0a 100644 --- a/src/logwriter.c +++ b/src/logwriter.c @@ -50,12 +50,14 @@ log_writer_fd_prepare(GSource *source, LogWriterWatch *self = (LogWriterWatch *) source; gint num_elements = self->writer->queue->length / 2; + self->pollfd.events = G_IO_ERR; + self->pollfd.revents = 0; if (self->writer->partial || (self->writer->options->flush_lines == 0 && num_elements != 0) || (self->writer->options->flush_lines > 0 && num_elements >= self->writer->options->flush_lines)) { /* we need to flush our buffers */ - self->pollfd.events = self->fd->cond; + self->pollfd.events |= self->fd->cond; } else if (num_elements) { @@ -96,13 +98,10 @@ log_writer_fd_prepare(GSource *source, } return FALSE; } - else - self->pollfd.events = 0; if (self->writer->flags & LW_DETECT_EOF) self->pollfd.events |= G_IO_HUP | G_IO_IN; self->flush_waiting_for_timeout = FALSE; - self->pollfd.revents = 0; return FALSE; } -- 1.6.4.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor