From 532ffcf220017f193924c8cd9c8b38334edac328 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Mon, 16 Aug 2010 15:03:51 -0700 Subject: [PATCH] librdmacm: initialize wsa --- trunk/ulp/librdmacm/src/addrinfo.cpp | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/trunk/ulp/librdmacm/src/addrinfo.cpp b/trunk/ulp/librdmacm/src/addrinfo.cpp index b9642fe6..acdc34de 100644 --- a/trunk/ulp/librdmacm/src/addrinfo.cpp +++ b/trunk/ulp/librdmacm/src/addrinfo.cpp @@ -36,11 +36,40 @@ #include #include +#include #include "cma.h" #include #include +static DWORD addr_ref; + +static void ucma_startup(void) +{ + WSADATA wsadata; + + EnterCriticalSection(&lock); + if (addr_ref++) { + goto out; + } + + if (WSAStartup(MAKEWORD(2, 2), &wsadata)) { + addr_ref--; + } + +out: + LeaveCriticalSection(&lock); +} + +static void ucma_shutdown(void) +{ + EnterCriticalSection(&lock); + if (--addr_ref == 0) { + WSACleanup(); + } + LeaveCriticalSection(&lock); +} + static void ucma_convert_to_ai(struct addrinfo *ai, struct rdma_addrinfo *rai) { memset(ai, 0, sizeof *ai); @@ -136,10 +165,12 @@ int rdma_getaddrinfo(char *node, char *service, struct addrinfo *ai; int ret; + ucma_startup(); if (hints) ucma_convert_to_ai(&ai_hints, hints); ret = getaddrinfo(node, service, &ai_hints, &ai); +printf("getaddrinfo %d\n", ret); if (ret) return ret; @@ -208,4 +239,5 @@ void rdma_freeaddrinfo(struct rdma_addrinfo *res) free(rai); } + ucma_shutdown(); } -- 2.46.0