PDP10, PDP11, VAX: Fix DMC/DMR DDCMP implementation to not crash due to buffer exhaustion while generating NAK packets for missing packets.
This commit is contained in:
parent
963ff98da4
commit
779e2437bd
2 changed files with 7 additions and 2 deletions
|
@ -211,7 +211,7 @@ r = rand();
|
||||||
rmax = (double)RAND_MAX;
|
rmax = (double)RAND_MAX;
|
||||||
#endif
|
#endif
|
||||||
if (msg[0] == DDCMP_ENQ) {
|
if (msg[0] == DDCMP_ENQ) {
|
||||||
int eat = 0 + (int) (2000.0 * (r / rmax));
|
int eat = 0 + (int) (2000.0 * (r / (rmax + 1.0)));
|
||||||
|
|
||||||
if (eat <= (trollHungerLevel * 2)) { /* Hungry? */
|
if (eat <= (trollHungerLevel * 2)) { /* Hungry? */
|
||||||
if (eat <= trollHungerLevel) { /* Eat the packet */
|
if (eat <= trollHungerLevel) { /* Eat the packet */
|
||||||
|
@ -225,7 +225,7 @@ if (msg[0] == DDCMP_ENQ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int eat = 0 + (int) (3000.0 * (r / rmax));
|
int eat = 0 + (int) (3000.0 * (r / (rmax + 1.0)));
|
||||||
|
|
||||||
if (eat <= (trollHungerLevel * 3)) { /* Hungry? */
|
if (eat <= (trollHungerLevel * 3)) { /* Hungry? */
|
||||||
if (eat <= trollHungerLevel) { /* Eat the packet */
|
if (eat <= trollHungerLevel) { /* Eat the packet */
|
||||||
|
|
|
@ -3037,6 +3037,11 @@ QH *qh = &controller->xmt_queue->hdr;
|
||||||
|
|
||||||
while (ddcmp_compare (controller->link.rcv_pkt[DDCMP_NUM_OFFSET], GE, R, controller)) {
|
while (ddcmp_compare (controller->link.rcv_pkt[DDCMP_NUM_OFFSET], GE, R, controller)) {
|
||||||
BUFFER *buffer = dmc_buffer_allocate(controller);
|
BUFFER *buffer = dmc_buffer_allocate(controller);
|
||||||
|
|
||||||
|
if (NULL == buffer) {
|
||||||
|
sim_debug(DBG_INF, controller->device, "%s%d: No Buffers cause NAKMissingPackets to stop\n", controller->device->name, controller->index);
|
||||||
|
break;
|
||||||
|
}
|
||||||
buffer->transfer_buffer = (uint8 *)malloc (DDCMP_HEADER_SIZE);
|
buffer->transfer_buffer = (uint8 *)malloc (DDCMP_HEADER_SIZE);
|
||||||
buffer->count = DDCMP_HEADER_SIZE;
|
buffer->count = DDCMP_HEADER_SIZE;
|
||||||
ddcmp_build_nak_packet (buffer->transfer_buffer, 2, R, DDCMP_FLAG_SELECT);
|
ddcmp_build_nak_packet (buffer->transfer_buffer, 2, R, DDCMP_FLAG_SELECT);
|
||||||
|
|
Loading…
Add table
Reference in a new issue