MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / xdr_debug_packet

Function xdr_debug_packet

src/remote/protocol.cpp:1454–1517  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1452
1453#ifdef DEBUG_XDR_MEMORY
1454static 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);

Callers 3

P_TRUEFunction · 0.85
P_FALSEFunction · 0.85
DEBUG_XDR_PACKETFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected