TMXR: Be sure to correctly allocate the appropriate sized line transmit and receive buffers when a mux or line is attached.

This commit is contained in:
Mark Pizzolato 2014-03-27 04:35:16 -07:00
parent 66a02b877b
commit fc885f80dc

View file

@ -2265,32 +2265,26 @@ while (*tptr) {
} }
} }
} }
if (unbuffered) { if ((unbuffered) && (mp->buffered))
if (mp->buffered) { mp->buffered = 0;
mp->buffered = 0; if (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]) {
mp->buffered = atoi(buffered); mp->buffered = atoi(buffered);
for (i = 0; i < mp->lines; i++) { /* initialize line buffers */ for (i = 0; i < mp->lines; i++) { /* initialize line buffers */
lp = mp->ldsc + i; lp = mp->ldsc + i;
if (mp->buffered) {
lp->txbsz = mp->buffered; lp->txbsz = mp->buffered;
lp->txbfd = 1; lp->txbfd = 1;
lp->txb = (char *)realloc(lp->txb, lp->txbsz);
lp->txbpi = lp->txbpr = 0;
lp->rxbsz = mp->buffered; 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) { if (nolog) {
mp->logfiletmpl[0] = '\0'; mp->logfiletmpl[0] = '\0';
@ -2429,23 +2423,18 @@ while (*tptr) {
return r; return r;
} }
} }
if (unbuffered) { if ((unbuffered) || (buffered[0] == '\0')) {
lp->txbsz = TMXR_MAXBUF; lp->rxbsz = lp->txbsz = TMXR_MAXBUF;
lp->txb = (char *)realloc (lp->txb, lp->txbsz); lp->txbfd = 0;
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 (buffered[0]) { else {
lp->txbsz = atoi(buffered); lp->rxbsz = lp->txbsz = atoi(buffered);
lp->txbfd = 1; 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) { if (nolog) {
free(lp->txlogname); free(lp->txlogname);
lp->txlogname = NULL; lp->txlogname = NULL;
@ -3395,6 +3384,7 @@ for (i = 0; i < mp->lines; i++) { /* loop thru conn */
free (lp->port); free (lp->port);
lp->port = NULL; lp->port = NULL;
} }
lp->txbfd = 0;
free (lp->txb); free (lp->txb);
lp->txb = NULL; lp->txb = NULL;
free (lp->rxb); free (lp->rxb);