summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/pbd/crossthread.win.cc8
-rw-r--r--libs/pbd/pbd.cc19
2 files changed, 19 insertions, 8 deletions
diff --git a/libs/pbd/crossthread.win.cc b/libs/pbd/crossthread.win.cc
index 32f52fc12c..5309916ddb 100644
--- a/libs/pbd/crossthread.win.cc
+++ b/libs/pbd/crossthread.win.cc
@@ -25,13 +25,6 @@ CrossThreadChannel::CrossThreadChannel (bool non_blocking)
, receive_socket()
, recv_address()
{
- WSADATA wsaData;
-
- if(WSAStartup(MAKEWORD(1,1),&wsaData) != 0) {
- std::cerr << "CrossThreadChannel::CrossThreadChannel() Winsock initialization failed with error: " << WSAGetLastError() << std::endl;
- return;
- }
-
struct sockaddr_in send_address;
// Create Send Socket
@@ -104,7 +97,6 @@ CrossThreadChannel::~CrossThreadChannel ()
closesocket(send_socket);
closesocket(receive_socket);
- WSACleanup();
}
void
diff --git a/libs/pbd/pbd.cc b/libs/pbd/pbd.cc
index 145e1b91a8..858d870c1a 100644
--- a/libs/pbd/pbd.cc
+++ b/libs/pbd/pbd.cc
@@ -34,6 +34,10 @@
#include "pbd/id.h"
#include "pbd/enumwriter.h"
+#ifdef PLATFORM_WINDOWS
+#include <winsock2.h>
+#endif
+
#include "i18n.h"
extern void setup_libpbd_enums ();
@@ -68,6 +72,17 @@ PBD::init ()
// Essential!! Make sure that any files used by Ardour
// will be created or opened in BINARY mode!
_fmode = O_BINARY;
+
+ WSADATA wsaData;
+
+ /* Initialize windows socket DLL for PBD::CrossThreadChannel
+ */
+
+ if (WSAStartup(MAKEWORD(1,1),&wsaData) != 0) {
+ fatal << "Windows socket initialization failed with error: " << WSAGetLastError() << endmsg;
+ /*NOTREACHED*/
+ return;
+ }
#endif
if (!Glib::thread_supported()) {
@@ -89,5 +104,9 @@ PBD::init ()
void
PBD::cleanup ()
{
+#ifdef PLATFORM_WINDOWS
+ WSACleanup();
+#endif
+
EnumWriter::destroy ();
}