diff --git a/PDP11/pdp11_ddcmp.h b/PDP11/pdp11_ddcmp.h index 46628b7b..448efa49 100644 --- a/PDP11/pdp11_ddcmp.h +++ b/PDP11/pdp11_ddcmp.h @@ -211,7 +211,7 @@ r = rand(); rmax = (double)RAND_MAX; #endif 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) { /* Eat the packet */ @@ -225,7 +225,7 @@ if (msg[0] == DDCMP_ENQ) { } } 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) { /* Eat the packet */ diff --git a/PDP11/pdp11_dmc.c b/PDP11/pdp11_dmc.c index 503bd8c2..eae9b906 100644 --- a/PDP11/pdp11_dmc.c +++ b/PDP11/pdp11_dmc.c @@ -3037,6 +3037,11 @@ QH *qh = &controller->xmt_queue->hdr; while (ddcmp_compare (controller->link.rcv_pkt[DDCMP_NUM_OFFSET], GE, R, 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->count = DDCMP_HEADER_SIZE; ddcmp_build_nak_packet (buffer->transfer_buffer, 2, R, DDCMP_FLAG_SELECT);