| 1452 | |
| 1453 | #ifdef DEBUG_XDR_MEMORY |
| 1454 | static bool_t xdr_debug_packet( RemoteXdr* xdrs, enum xdr_op xop, PACKET* packet) |
| 1455 | { |
| 1456 | /************************************** |
| 1457 | * |
| 1458 | * x d r _ d e b u g _ p a c k e t |
| 1459 | * |
| 1460 | ************************************** |
| 1461 | * |
| 1462 | * Functional description |
| 1463 | * Start/stop monitoring a packet's memory allocations by |
| 1464 | * entering/removing from a port's packet tracking vector. |
| 1465 | * |
| 1466 | **************************************/ |
| 1467 | rem_port* port = xdrs->x_public; |
| 1468 | fb_assert(port != 0); |
| 1469 | fb_assert(port->port_header.blk_type == type_port); |
| 1470 | |
| 1471 | if (xop == XDR_FREE) |
| 1472 | { |
| 1473 | // Free a slot in the packet tracking vector |
| 1474 | |
| 1475 | rem_vec* vector = port->port_packet_vector; |
| 1476 | if (vector) |
| 1477 | { |
| 1478 | for (ULONG i = 0; i < vector->vec_count; i++) |
| 1479 | { |
| 1480 | if (vector->vec_object[i] == (BLK) packet) { |
| 1481 | vector->vec_object[i] = 0; |
| 1482 | return TRUE; |
| 1483 | } |
| 1484 | } |
| 1485 | } |
| 1486 | } |
| 1487 | else |
| 1488 | { |
| 1489 | // XDR_ENCODE or XDR_DECODE |
| 1490 | |
| 1491 | // Allocate an unused slot in the packet tracking vector |
| 1492 | // to start recording memory allocations for this packet. |
| 1493 | |
| 1494 | fb_assert(xop == XDR_ENCODE || xop == XDR_DECODE); |
| 1495 | rem_vec* vector = A L L R _vector(&port->port_packet_vector, 0); |
| 1496 | ULONG i; |
| 1497 | |
| 1498 | for (i = 0; i < vector->vec_count; i++) |
| 1499 | { |
| 1500 | if (vector->vec_object[i] == (BLK) packet) |
| 1501 | return TRUE; |
| 1502 | } |
| 1503 | |
| 1504 | for (i = 0; i < vector->vec_count; i++) |
| 1505 | { |
| 1506 | if (vector->vec_object[i] == 0) |
| 1507 | break; |
| 1508 | } |
| 1509 | |
| 1510 | if (i >= vector->vec_count) |
| 1511 | vector = A L L R _vector(&port->port_packet_vector, i); |
no outgoing calls
no test coverage detected