AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname))
AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
-AC_CHECK_FUNCS([gethostname memset strchr strerror strstr uname backtrace_symbols gettimeofday strrchr daemon fork])
+AC_CHECK_FUNCS([gethostname memset strchr strerror strstr uname backtrace_symbols gettimeofday strrchr daemon fork writev])
AC_CHECK_FUNC(gcry_control, , AC_CHECK_LIB(gcrypt, gcry_control))
PKG_PROG_PKG_CONFIG
self->parent = NULL;
self->transport = g_new0(struct irc_transport, 1);
- self->transport->pending_lines = g_queue_new();
self->transport->backend_data = self;
self->transport->backend_ops = &py_transport_ops;
struct irc_transport *transport;
transport = g_new0(struct irc_transport, 1);
- transport->pending_lines = g_queue_new();
Py_INCREF(obj);
transport->backend_data = obj;
transport->backend_ops = &py_transport_ops;
transport->callbacks->disconnect(transport);
}
-static void free_pending_line(void *_line, void *userdata)
-{
- free_line((struct irc_line *)_line);
-}
-
-
void free_irc_transport(struct irc_transport *transport)
{
transport->backend_ops->free_data(transport->backend_data);
g_free(transport->charset);
- g_assert(transport->pending_lines != NULL);
- g_queue_foreach(transport->pending_lines, free_pending_line, NULL);
- g_queue_free(transport->pending_lines);
-
g_free(transport);
}
gint outgoing_id;
GIConv incoming_iconv;
GIConv outgoing_iconv;
+ GQueue *pending_lines;
};
static gboolean handle_transport_receive(GIOChannel *c, GIOCondition cond,
void *_transport);
+static void free_pending_line(void *_line, void *userdata)
+{
+ free_line((struct irc_line *)_line);
+}
+
static void irc_transport_iochannel_free_data(void *data)
{
struct irc_transport_data_iochannel *backend_data = (struct irc_transport_data_iochannel *)data;
if (backend_data->incoming_iconv != (GIConv)-1)
g_iconv_close(backend_data->incoming_iconv);
+ g_queue_foreach(backend_data->pending_lines, free_pending_line, NULL);
+ g_queue_free(backend_data->pending_lines);
+
g_free(backend_data);
}
}
if (backend_data->outgoing_id != 0) {
- g_queue_push_tail(transport->pending_lines, linedup(l));
+ g_queue_push_tail(backend_data->pending_lines, linedup(l));
return TRUE;
}
case G_IO_STATUS_AGAIN:
backend_data->outgoing_id = g_io_add_watch(backend_data->incoming, G_IO_OUT,
transport_send_queue, transport);
- g_queue_push_tail(transport->pending_lines, linedup(l));
+ g_queue_push_tail(backend_data->pending_lines, linedup(l));
break;
case G_IO_STATUS_EOF:
transport->callbacks->hangup(transport);
ret->backend_ops = &irc_transport_iochannel_ops;
ret->backend_data = backend_data;
backend_data->incoming = iochannel;
- ret->pending_lines = g_queue_new();
+ backend_data->pending_lines = g_queue_new();
backend_data->outgoing_iconv = backend_data->incoming_iconv = (GIConv)-1;
g_io_channel_ref(backend_data->incoming);
if (status == G_IO_STATUS_AGAIN)
ret = TRUE;
- g_assert(transport->pending_lines != NULL);
+ g_assert(backend_data->pending_lines != NULL);
- while (!g_queue_is_empty(transport->pending_lines)) {
+ while (!g_queue_is_empty(backend_data->pending_lines)) {
GError *error = NULL;
- struct irc_line *l = g_queue_pop_head(transport->pending_lines);
+ struct irc_line *l = g_queue_pop_head(backend_data->pending_lines);
g_assert(backend_data->incoming != NULL);
status = irc_send_line(backend_data->incoming,
switch (status) {
case G_IO_STATUS_AGAIN:
- g_queue_push_head(transport->pending_lines, l);
+ g_queue_push_head(backend_data->pending_lines, l);
return TRUE;
case G_IO_STATUS_ERROR:
transport->callbacks->log(transport, l, error);
char *str;
char buf[120];
g_snprintf(buf, sizeof(buf), "PRIVMSG foo :bar: %d\r\n", i);
- if (!g_queue_is_empty(t->pending_lines))
- g_main_iteration(FALSE);
+ g_main_iteration(FALSE);
g_io_channel_read_line(ch2, &str, NULL, NULL, NULL);
fail_if(strcmp(str, buf));
}