MCPcopy Create free account
hub / github.com/apache/brpc / GetPooledSocket

Method GetPooledSocket

src/brpc/socket.cpp:2724–2765  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2722}
2723
2724int Socket::GetPooledSocket(SocketUniquePtr* pooled_socket) {
2725 if (pooled_socket == NULL) {
2726 LOG(ERROR) << "pooled_socket is NULL";
2727 return -1;
2728 }
2729 SharedPart* main_sp = GetOrNewSharedPart();
2730 if (main_sp == NULL) {
2731 LOG(ERROR) << "_shared_part is NULL";
2732 return -1;
2733 }
2734 // Create socket_pool optimistically.
2735 SocketPool* socket_pool = main_sp->socket_pool.load(butil::memory_order_consume);
2736 if (socket_pool == NULL) {
2737 SocketOptions opt;
2738 opt.remote_side = remote_side();
2739 opt.local_side = butil::EndPoint(local_side().ip, 0);
2740 opt.user = user();
2741 opt.on_edge_triggered_events = _on_edge_triggered_events;
2742 opt.need_on_edge_trigger = _need_on_edge_trigger;
2743 opt.initial_ssl_ctx = _ssl_ctx;
2744 opt.keytable_pool = _keytable_pool;
2745 opt.app_connect = _app_connect;
2746 opt.socket_mode = _socket_mode;
2747 socket_pool = new SocketPool(opt);
2748 SocketPool* expected = NULL;
2749 if (!main_sp->socket_pool.compare_exchange_strong(
2750 expected, socket_pool, butil::memory_order_acq_rel)) {
2751 delete socket_pool;
2752 CHECK(expected);
2753 socket_pool = expected;
2754 }
2755 }
2756 if (socket_pool->GetSocket(pooled_socket) != 0) {
2757 return -1;
2758 }
2759 (*pooled_socket)->ShareStats(this);
2760 CHECK((*pooled_socket)->parsing_context() == NULL)
2761 << "context=" << (*pooled_socket)->parsing_context()
2762 << " is not NULL when " << *(*pooled_socket) << " is got from"
2763 " SocketPool, the protocol implementation is buggy";
2764 return 0;
2765}
2766
2767int Socket::ReturnToPool() {
2768 SharedPart* sp = _shared_part.exchange(NULL, butil::memory_order_acquire);

Callers 2

TEST_FFunction · 0.80
IssueRPCMethod · 0.80

Calls 8

remote_sideFunction · 0.85
EndPointClass · 0.85
local_sideFunction · 0.85
userFunction · 0.85
GetSocketMethod · 0.80
ShareStatsMethod · 0.80
loadMethod · 0.45

Tested by 1

TEST_FFunction · 0.64