| 589 | } |
| 590 | |
| 591 | SocketAdapter::~SocketAdapter() |
| 592 | { |
| 593 | //Force close all sessions |
| 594 | std::vector<ConnectionKey> keys = connections.GetKeys(); |
| 595 | DevCon.WriteLn("DEV9: Socket: Closing %d Connections", keys.size()); |
| 596 | for (size_t i = 0; i < keys.size(); i++) |
| 597 | { |
| 598 | const ConnectionKey key = keys[i]; |
| 599 | BaseSession* session; |
| 600 | if (!connections.TryGetValue(key, &session)) |
| 601 | continue; |
| 602 | delete session; |
| 603 | } |
| 604 | connections.Clear(); |
| 605 | fixedUDPPorts.Clear(); //fixedUDP sessions already deleted via connections |
| 606 | |
| 607 | //Clear out any delete queues |
| 608 | DevCon.WriteLn("DEV9: Socket: Found %d Connections in send delete queue", deleteQueueSendThread.size()); |
| 609 | DevCon.WriteLn("DEV9: Socket: Found %d Connections in recv delete queue", deleteQueueRecvThread.size()); |
| 610 | for (BaseSession* s : deleteQueueSendThread) |
| 611 | delete s; |
| 612 | for (BaseSession* s : deleteQueueRecvThread) |
| 613 | delete s; |
| 614 | deleteQueueSendThread.clear(); |
| 615 | deleteQueueRecvThread.clear(); |
| 616 | |
| 617 | //Clear out vRecBuffer |
| 618 | while (!vRecBuffer.IsQueueEmpty()) |
| 619 | { |
| 620 | EthernetFrame* retPay; |
| 621 | if (!vRecBuffer.Dequeue(&retPay)) |
| 622 | { |
| 623 | using namespace std::chrono_literals; |
| 624 | std::this_thread::sleep_for(1ms); |
| 625 | continue; |
| 626 | } |
| 627 | |
| 628 | delete retPay; |
| 629 | } |
| 630 | } |
nothing calls this directly
no test coverage detected