diff --git a/src/sbbs3/sexyz.c b/src/sbbs3/sexyz.c index 030929430743b34f20f1daa64a59ef0b1797a473..17754487e18e584e4fb02da99c608d5c343eaca9 100644 --- a/src/sbbs3/sexyz.c +++ b/src/sbbs3/sexyz.c @@ -72,7 +72,8 @@ #include "sexyz.h" #define SINGLE_THREADED FALSE -#define IO_THREAD_BUF_SIZE 4096 +#define MIN_OUTBUF_SIZE 1024 +#define MAX_OUTBUF_SIZE (64*1024) /***************/ /* Global Vars */ @@ -117,6 +118,7 @@ RingBuf outbuf; xpevent_t outbuf_empty; #endif unsigned outbuf_drain_timeout; +long outbuf_size; unsigned flows=0; unsigned select_errors=0; @@ -485,7 +487,7 @@ int send_byte(void* unused, uchar ch, unsigned timeout) static void output_thread(void* arg) { char stats[128]; - BYTE buf[IO_THREAD_BUF_SIZE]; + BYTE buf[MAX_OUTBUF_SIZE]; int i; ulong avail; ulong total_sent=0; @@ -1229,8 +1231,8 @@ static const char* usage= "opts = -y to overwrite files when receiving\n" " -o disable Zmodem CRC-32 mode (use CRC-16)\n" " -s disable Zmodem streaming (Slow Zmodem)\n" - " -2 set initial Zmodem block size to 2K\n" - " -4 set initial Zmodem block size to 4K\n" + " -2 set maximum Zmodem block size to 2K\n" + " -4 set maximum Zmodem block size to 4K\n" " -8 set maximum Zmodem block size to 8K (ZedZap)\n" " -! to pause after abnormal exit (error)\n" " -telnet to enable Telnet mode (the default)\n" @@ -1285,8 +1287,6 @@ int main(int argc, char **argv) ,PLATFORM_DESC ); - RingBufInit(&outbuf, IO_THREAD_BUF_SIZE); - xmodem_init(&xm,NULL,&mode,lputs,xmodem_progress,send_byte,recv_byte,is_connected); zmodem_init(&zm,NULL,lputs,zmodem_progress,send_byte,recv_byte,is_connected,data_waiting); @@ -1319,6 +1319,7 @@ int main(int argc, char **argv) outbuf.highwater_mark =iniReadInteger(fp,ROOT_SECTION,"OutbufHighwaterMark",1100); outbuf_drain_timeout =iniReadInteger(fp,ROOT_SECTION,"OutbufDrainTimeout",10); + outbuf_size =iniReadInteger(fp,ROOT_SECTION,"OutbufSize",8192); progress_interval =iniReadInteger(fp,ROOT_SECTION,"ProgressInterval",1); @@ -1345,6 +1346,14 @@ int main(int argc, char **argv) atexit(exiting); + if(outbuf_size < MIN_OUTBUF_SIZE) + outbuf_size = MIN_OUTBUF_SIZE; + else if(outbuf_size > MAX_OUTBUF_SIZE) + outbuf_size = MAX_OUTBUF_SIZE; + + fprintf(statfp,"Output buffer size: %u\n", outbuf_size); + RingBufInit(&outbuf, outbuf_size); + #if !defined(RINGBUF_EVENT) outbuf_empty=CreateEvent(NULL,/* ManualReset */TRUE, /*InitialState */TRUE,NULL); #endif @@ -1443,10 +1452,10 @@ int main(int argc, char **argv) mode|=CRC; break; case '2': - zm.block_size=2048; + zm.max_block_size=2048; break; case '4': - zm.block_size=4096; + zm.max_block_size=4096; break; case '8': /* ZedZap */ zm.max_block_size=8192;