aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/events.c
diff options
context:
space:
mode:
authorGravatar Brendan Taylor <whateley@gmail.com>2010-10-08 08:25:12 -0600
committerGravatar Brendan Taylor <whateley@gmail.com>2010-10-08 08:25:12 -0600
commit1131d95f5925f78b4d4aac590b38cfb2ac35b7eb (patch)
tree35b38bd0449aeccaceb50b4be77ea593424ae6d4 /src/events.c
parenta327fab5b2581343f2414446be37e38c212355d1 (diff)
oops, memory leak fixes introduced a double free. fixed.
Diffstat (limited to 'src/events.c')
-rw-r--r--src/events.c102
1 files changed, 42 insertions, 60 deletions
diff --git a/src/events.c b/src/events.c
index 40a28e2..ee2f96c 100644
--- a/src/events.c
+++ b/src/events.c
@@ -57,57 +57,53 @@ event_buffer_timeout(guint sec) {
setitimer(ITIMER_REAL, &t, NULL);
}
-
-void
-send_event_socket(GString *msg) {
+static void
+send_event_sockets(GPtrArray *sockets, GString *msg) {
GError *error = NULL;
- GString *tmp;
- GIOChannel *gio = NULL;
GIOStatus ret;
gsize len;
- guint i=0, j=0;
+ guint i=0;
+
+ while(i < sockets->len) {
+ GIOChannel *gio = g_ptr_array_index(sockets, i++);
+
+ if(gio && gio->is_writeable && msg) {
+ ret = g_io_channel_write_chars (gio,
+ msg->str, msg->len,
+ &len, &error);
+
+ if (ret == G_IO_STATUS_ERROR)
+ g_warning ("Error sending event to socket: %s", error->message);
+ else
+ g_io_channel_flush(gio, &error);
+ }
+ }
+}
+
+static void
+replay_buffered_events() {
+ guint i = 0;
+ event_buffer_timeout(0);
+
+ /* replay buffered events */
+ while(i < uzbl.state.event_buffer->len) {
+ GString *tmp = g_ptr_array_index(uzbl.state.event_buffer, i++);
+ send_event_sockets(uzbl.comm.connect_chan, tmp);
+ g_string_free(tmp, TRUE);
+ }
+
+ g_ptr_array_free(uzbl.state.event_buffer, TRUE);
+ uzbl.state.event_buffer = NULL;
+}
+
+void
+send_event_socket(GString *msg) {
/* write to all --connect-socket sockets */
if(uzbl.comm.connect_chan) {
- while(i < uzbl.comm.connect_chan->len) {
- gio = g_ptr_array_index(uzbl.comm.connect_chan, i++);
- j=0;
-
- if(gio && gio->is_writeable) {
- if(uzbl.state.event_buffer) {
- event_buffer_timeout(0);
-
- /* replay buffered events */
- while(j < uzbl.state.event_buffer->len) {
- tmp = g_ptr_array_index(uzbl.state.event_buffer, j++);
- ret = g_io_channel_write_chars (gio,
- tmp->str, tmp->len,
- &len, &error);
- g_string_free(tmp, TRUE);
-
- if (ret == G_IO_STATUS_ERROR)
- g_warning ("Error sending event to socket: %s", error->message);
- else
- g_io_channel_flush(gio, &error);
- }
- }
-
- if(msg) {
- ret = g_io_channel_write_chars (gio,
- msg->str, msg->len,
- &len, &error);
-
- if (ret == G_IO_STATUS_ERROR)
- g_warning ("Error sending event to socket: %s", error->message);
- else
- g_io_channel_flush(gio, &error);
- }
- }
- }
- if(uzbl.state.event_buffer) {
- g_ptr_array_free(uzbl.state.event_buffer, TRUE);
- uzbl.state.event_buffer = NULL;
- }
+ send_event_sockets(uzbl.comm.connect_chan, msg);
+ if(uzbl.state.event_buffer)
+ replay_buffered_events();
}
/* buffer events until a socket is set and connected
* or a timeout is encountered
@@ -119,22 +115,8 @@ send_event_socket(GString *msg) {
}
/* write to all client sockets */
- i=0;
if(msg && uzbl.comm.client_chan) {
- while(i < uzbl.comm.client_chan->len) {
- gio = g_ptr_array_index(uzbl.comm.client_chan, i++);
-
- if(gio && gio->is_writeable && msg) {
- ret = g_io_channel_write_chars (gio,
- msg->str, msg->len,
- &len, &error);
-
- if (ret == G_IO_STATUS_ERROR)
- g_warning ("Error sending event to socket: %s", error->message);
- else
- g_io_channel_flush(gio, &error);
- }
- }
+ send_event_sockets(uzbl.comm.client_chan, msg);
}
}