From 64044cb106925600564a5a72a7d08efb64635e04 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Fri, 10 Jun 2005 10:01:44 +0000 Subject: [PATCH] Log more details on timeout waiting for output buffer to empty. On send error, wait up to 1 sec for back channel data after next frame. --- src/sbbs3/sexyz.c | 8 +++++--- src/sbbs3/zmodem.c | 9 +++++---- src/sbbs3/zmodem.h | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/sbbs3/sexyz.c b/src/sbbs3/sexyz.c index 418f491c3b..0f406d05a4 100644 --- a/src/sbbs3/sexyz.c +++ b/src/sbbs3/sexyz.c @@ -412,7 +412,9 @@ int send_byte(void* unused, uchar ch, unsigned timeout) fprintf(statfp,"FLOW"); flows++; if(WaitForEvent(outbuf_empty,timeout*1000)!=WAIT_OBJECT_0) { - fprintf(statfp,"\n!ERROR Waiting for output buffer to flush\n"); + fprintf(statfp + ,"\n!TIMEOUT waiting for output buffer to flush (%u seconds, %u bytes)\n" + ,timeout, RingBufFull(&outbuf)); newline=TRUE; return(-1); } @@ -592,11 +594,11 @@ BOOL is_connected(void* unused) return socket_check(sock,NULL,NULL,0); } -BOOL data_waiting(void* unused) +BOOL data_waiting(void* unused, unsigned timeout) { BOOL rd; - if(!socket_check(sock,&rd,NULL,0)) + if(!socket_check(sock,&rd,NULL,timeout)) return(FALSE); return(rd); } diff --git a/src/sbbs3/zmodem.c b/src/sbbs3/zmodem.c index 1a8e56856d..d5afd33f94 100644 --- a/src/sbbs3/zmodem.c +++ b/src/sbbs3/zmodem.c @@ -70,10 +70,10 @@ static BOOL is_connected(zmodem_t* zm) return(TRUE); } -int zmodem_data_waiting(zmodem_t* zm) +int zmodem_data_waiting(zmodem_t* zm, unsigned timeout) { if(zm->data_waiting) - return(zm->data_waiting(zm->cbdata)); + return(zm->data_waiting(zm->cbdata, timeout)); return(FALSE); } @@ -1421,7 +1421,8 @@ int zmodem_send_from(zmodem_t* zm, FILE* fp, ulong pos, ulong* sent) * check out that header */ - while(zmodem_data_waiting(zm) && !zm->cancelled && is_connected(zm)) { + while(zmodem_data_waiting(zm, zm->consecutive_errors ? 1000:0) + && !zm->cancelled && is_connected(zm)) { int type; int c; lprintf(zm,LOG_DEBUG,"Back-channel traffic detected:"); @@ -2030,7 +2031,7 @@ void zmodem_init(zmodem_t* zm, void* cbdata ,int (*send_byte)(void*, uchar ch, unsigned timeout) ,int (*recv_byte)(void*, unsigned timeout) ,BOOL (*is_connected)(void*) - ,BOOL (*data_waiting)(void*)) + ,BOOL (*data_waiting)(void*, unsigned timeout)) { memset(zm,0,sizeof(zmodem_t)); diff --git a/src/sbbs3/zmodem.h b/src/sbbs3/zmodem.h index 5d6d96d4da..953275f93a 100644 --- a/src/sbbs3/zmodem.h +++ b/src/sbbs3/zmodem.h @@ -272,7 +272,7 @@ typedef struct { int (*recv_byte)(void*, unsigned timeout); void (*progress)(void*, ulong current_pos); BOOL (*is_connected)(void*); - BOOL (*data_waiting)(void*); + BOOL (*data_waiting)(void*, unsigned timeout); } zmodem_t; @@ -282,7 +282,7 @@ void zmodem_init(zmodem_t*, void* cbdata ,int (*send_byte)(void*, BYTE ch, unsigned timeout) ,int (*recv_byte)(void*, unsigned timeout) ,BOOL (*is_connected)(void*) - ,BOOL (*data_waiting)(void*) + ,BOOL (*data_waiting)(void*, unsigned timeout) ); char* zmodem_ver(char *buf); const char* zmodem_source(void); -- GitLab