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:
parent
66a02b877b
commit
fc885f80dc
1 changed files with 25 additions and 35 deletions
60
sim_tmxr.c
60
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);
|
||||
|
|
Loading…
Add table
Reference in a new issue