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
48
sim_tmxr.c
48
sim_tmxr.c
|
@ -2265,33 +2265,27 @@ while (*tptr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (unbuffered) {
|
if ((unbuffered) && (mp->buffered))
|
||||||
if (mp->buffered) {
|
|
||||||
mp->buffered = 0;
|
mp->buffered = 0;
|
||||||
for (i = 0; i < mp->lines; i++) { /* default line buffers */
|
if (buffered[0])
|
||||||
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;
|
||||||
|
}
|
||||||
|
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->rxb = (char *)realloc(lp->rxb, lp->rxbsz);
|
||||||
lp->rbr = (char *)realloc(lp->rbr, lp->rxbsz);
|
lp->rbr = (char *)realloc(lp->rbr, lp->rxbsz);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (nolog) {
|
if (nolog) {
|
||||||
mp->logfiletmpl[0] = '\0';
|
mp->logfiletmpl[0] = '\0';
|
||||||
for (i = 0; i < mp->lines; i++) { /* close line logs */
|
for (i = 0; i < mp->lines; i++) { /* close line logs */
|
||||||
|
@ -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->txbpi = lp->txbpr = 0;
|
||||||
lp->rxbsz = lp->txbsz;
|
lp->txb = (char *)realloc (lp->txb, lp->txbsz);
|
||||||
lp->rxb = (char *)realloc(lp->rxb, lp->rxbsz);
|
lp->rxb = (char *)realloc(lp->rxb, lp->rxbsz);
|
||||||
lp->rbr = (char *)realloc(lp->rbr, 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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue