From fc885f80dc2671c9db7f6192422fde879056808a Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Thu, 27 Mar 2014 04:35:16 -0700 Subject: [PATCH] TMXR: Be sure to correctly allocate the appropriate sized line transmit and receive buffers when a mux or line is attached. --- sim_tmxr.c | 60 +++++++++++++++++++++++------------------------------- 1 file changed, 25 insertions(+), 35 deletions(-) diff --git a/sim_tmxr.c b/sim_tmxr.c index 58e70a4c..eb75e5ac 100644 --- a/sim_tmxr.c +++ b/sim_tmxr.c @@ -2265,32 +2265,26 @@ while (*tptr) { } } } - if (unbuffered) { - if (mp->buffered) { - mp->buffered = 0; - for (i = 0; i < mp->lines; i++) { /* default line buffers */ - lp = mp->ldsc + i; - lp->rxbsz = TMXR_MAXBUF; - lp->rxb = (char *)realloc(lp->rxb, lp->rxbsz); - lp->rbr = (char *)realloc(lp->rbr, lp->rxbsz); - lp->txbsz = TMXR_MAXBUF; - lp->txb = (char *)realloc(lp->txb, lp->txbsz); - lp->txbfd = lp->txbpi = lp->txbpr = 0; - } - } - } - if (buffered[0]) { + if ((unbuffered) && (mp->buffered)) + mp->buffered = 0; + if (buffered[0]) mp->buffered = atoi(buffered); - for (i = 0; i < mp->lines; i++) { /* initialize line buffers */ - lp = mp->ldsc + i; + for (i = 0; i < mp->lines; i++) { /* initialize line buffers */ + lp = mp->ldsc + i; + if (mp->buffered) { lp->txbsz = mp->buffered; lp->txbfd = 1; - lp->txb = (char *)realloc(lp->txb, lp->txbsz); - lp->txbpi = lp->txbpr = 0; lp->rxbsz = mp->buffered; - lp->rxb = (char *)realloc(lp->rxb, lp->rxbsz); - lp->rbr = (char *)realloc(lp->rbr, lp->rxbsz); } + else { + lp->txbsz = TMXR_MAXBUF; + lp->txbfd = 0; + lp->rxbsz = TMXR_MAXBUF; + } + lp->txbpi = lp->txbpr = 0; + lp->txb = (char *)realloc(lp->txb, lp->txbsz); + lp->rxb = (char *)realloc(lp->rxb, lp->rxbsz); + lp->rbr = (char *)realloc(lp->rbr, lp->rxbsz); } if (nolog) { mp->logfiletmpl[0] = '\0'; @@ -2429,23 +2423,18 @@ while (*tptr) { return r; } } - if (unbuffered) { - lp->txbsz = TMXR_MAXBUF; - lp->txb = (char *)realloc (lp->txb, lp->txbsz); - lp->txbfd = lp->txbpi = lp->txbpr = 0; - lp->rxbsz = lp->txbsz; - lp->rxb = (char *)realloc(lp->rxb, lp->rxbsz); - lp->rbr = (char *)realloc(lp->rbr, lp->rxbsz); + if ((unbuffered) || (buffered[0] == '\0')) { + lp->rxbsz = lp->txbsz = TMXR_MAXBUF; + lp->txbfd = 0; } - if (buffered[0]) { - lp->txbsz = atoi(buffered); + else { + lp->rxbsz = lp->txbsz = atoi(buffered); lp->txbfd = 1; - lp->txb = (char *)realloc (lp->txb, lp->txbsz); - lp->txbpi = lp->txbpr = 0; - lp->rxbsz = lp->txbsz; - lp->rxb = (char *)realloc(lp->rxb, lp->rxbsz); - lp->rbr = (char *)realloc(lp->rbr, lp->rxbsz); } + lp->txbpi = lp->txbpr = 0; + lp->txb = (char *)realloc (lp->txb, lp->txbsz); + lp->rxb = (char *)realloc(lp->rxb, lp->rxbsz); + lp->rbr = (char *)realloc(lp->rbr, lp->rxbsz); if (nolog) { free(lp->txlogname); lp->txlogname = NULL; @@ -3395,6 +3384,7 @@ for (i = 0; i < mp->lines; i++) { /* loop thru conn */ free (lp->port); lp->port = NULL; } + lp->txbfd = 0; free (lp->txb); lp->txb = NULL; free (lp->rxb);