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

Function link_request

src/remote/server/server.cpp:1588–1652  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1586
1587
1588static bool link_request(rem_port* port, server_req_t* request)
1589{
1590/**************************************
1591 *
1592 * l i n k _ r e q u e s t
1593 *
1594 **************************************
1595 *
1596 * Functional description
1597 * Search for a port in a queue,
1598 * if found - append new request to it.
1599 *
1600 **************************************/
1601 const P_OP operation = request->req_receive.p_operation;
1602 server_req_t* queue;
1603
1604 MutexLockGuard queGuard(request_que_mutex, FB_FUNCTION);
1605
1606 bool active = true;
1607 queue = active_requests;
1608
1609 while (true)
1610 {
1611 for (; queue; queue = queue->req_next)
1612 {
1613 if (queue->req_port == port)
1614 {
1615 // Don't queue a dummy keepalive packet if there is a request on this port
1616 if (operation == op_dummy)
1617 {
1618 free_request(request);
1619 return true;
1620 }
1621
1622 append_request_chain(request, &queue->req_chain);
1623#ifdef DEBUG_REMOTE_MEMORY
1624 printf("link_request %s request_queued %d\n",
1625 active ? "ACTIVE" : "PENDING", port->port_requests_queued.value());
1626 fflush(stdout);
1627#endif
1628 break;
1629 }
1630 }
1631
1632 if (queue || !active)
1633 break;
1634
1635 queue = request_que;
1636 active = false;
1637 }
1638
1639 if (!queue)
1640 append_request_next(request, &request_que);
1641
1642 ++port->port_requests_queued;
1643
1644 if (queue)
1645 {

Callers 2

SRVR_multi_threadFunction · 0.85
loopThreadFunction · 0.85

Calls 6

free_requestFunction · 0.85
append_request_chainFunction · 0.85
fflushFunction · 0.85
append_request_nextFunction · 0.85
cancel_operationFunction · 0.85
valueMethod · 0.45

Tested by

no test coverage detected