aboutsummaryrefslogtreecommitdiffstats
path: root/bitlbee.c
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2006-01-18 23:17:59 +0100
committerWilmer van der Gaast <wilmer@gaast.net>2006-01-18 23:17:59 +0100
commit4c266f2d79212e4e0ff4b9b33088685a2ec452e4 (patch)
tree57312efb83e7f4eb1351215dec285d56dc7ebf99 /bitlbee.c
parent1ea13be2cf335a471f85ea54d610fb91b7d14564 (diff)
parentc1826c6f72d1fe85e1c5decf5207601dac2c23e7 (diff)
Merged (and adapted) changes from main tree.
Diffstat (limited to 'bitlbee.c')
-rw-r--r--bitlbee.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/bitlbee.c b/bitlbee.c
index dc6b8261..7b0b8398 100644
--- a/bitlbee.c
+++ b/bitlbee.c
@@ -169,7 +169,7 @@ gboolean bitlbee_io_current_client_read( GIOChannel *source, GIOCondition condit
if( !irc_process( irc ) )
{
log_message( LOGLVL_INFO, "Destroying connection with fd %d.", irc->fd );
- irc_free( irc );
+ irc_abort( irc );
return FALSE;
}
@@ -177,7 +177,7 @@ gboolean bitlbee_io_current_client_read( GIOChannel *source, GIOCondition condit
if( irc->readbuffer && ( strlen( irc->readbuffer ) > 1024 ) )
{
log_message( LOGLVL_ERROR, "Maximum line length exceeded." );
- irc_free( irc );
+ irc_abort( irc );
return FALSE;
}
@@ -196,25 +196,25 @@ gboolean bitlbee_io_current_client_write( GIOChannel *source, GIOCondition condi
size = strlen( irc->sendbuffer );
st = write( irc->fd, irc->sendbuffer, size );
- if( st <= 0 )
+ if( st == 0 || ( st < 0 && !sockerr_again() ) )
{
- if( sockerr_again() )
- {
- return TRUE;
- }
- else
- {
- irc_free( irc );
- return FALSE;
- }
+ irc_free( irc );
+ return FALSE;
+ }
+ else if( st < 0 ) /* && sockerr_again() */
+ {
+ return TRUE;
}
if( st == size )
{
g_free( irc->sendbuffer );
irc->sendbuffer = NULL;
-
irc->w_watch_source_id = 0;
+
+ if( irc->status == USTATUS_SHUTDOWN )
+ irc_free( irc );
+
return( FALSE );
}
else