[Xcb] [PATCH 3/3] Use WSAStartup()/WSACleanup() on WIN32

Josh Triplett josh at joshtriplett.org
Thu Jan 5 13:28:06 PST 2012


On Thu, Jan 05, 2012 at 08:57:54PM +0000, Jon TURNEY wrote:
> From: Ryan Pavlik <rpavlik at iastate.edu>
> 
> The alternative is to use these in every WIN32 application which uses xcb. Doing
> it this way should be safe, as, according to MSDN, "There must be a call to
> WSACleanup for each successful call to WSAStartup. Only the final WSACleanup
> function call performs the actual cleanup. The preceding calls simply decrement
> an internal reference count"
[...]
> Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>

Typically a patch needs a signoff by its author, not just the person
submitting it.  XCB doesn't particularly require signoffs, but if you
want to follow that convention you should have the original author sign
off.

> --- a/src/xcb_conn.c
> +++ b/src/xcb_conn.c
> @@ -313,6 +313,10 @@ void xcb_disconnect(xcb_connection_t *c)
>      _xcb_xid_destroy(c);
>  
>      free(c);
> +
> +#ifdef _WIN32
> +    WSACleanup();
> +#endif
>  }
>  
>  /* Private interface */
> diff --git a/src/xcb_util.c b/src/xcb_util.c
> index 62c51e1..d64c904 100644
> --- a/src/xcb_util.c
> +++ b/src/xcb_util.c
> @@ -426,8 +426,13 @@ xcb_connection_t *xcb_connect_to_display_with_auth_info(const char *displayname,
>      if(!parsed) {
>          c = (xcb_connection_t *) &error_connection;
>          goto out;
> -    } else
> +    } else {
> +#ifdef _WIN32
> +        WSADATA wsaData;
> +        WSAStartup(MAKEWORD(2, 2), &wsaData);
> +#endif
>          fd = _xcb_open(host, protocol, display);
> +    }

What happens if the application using XCB has already called WSAStartup,
and passes a lower version number than 2.2?  Will XCB's call to
WSAStartup cause Winsock to start assuming 2.2 semantics instead of
whatever older semantics the application requested?  Or will Winsock
just tell XCB to use the older version?  In the latter case, can XCB
live with that?

- Josh Triplett


More information about the Xcb mailing list