diff --git a/backends/swiften/main.cpp b/backends/swiften/main.cpp index d9199aeb3dbfba5abb8ac1ff3cedc42659c59e1d..6db0d86c3c88bacfc093e865c4a9af0fbf09b430 100644 --- a/backends/swiften/main.cpp +++ b/backends/swiften/main.cpp @@ -14,8 +14,10 @@ #include "sys/signal.h" #endif +#ifndef __FreeBSD__ // malloc_trim #include "malloc.h" +#endif // Boost #include @@ -61,14 +63,15 @@ class SwiftenPlugin : public NetworkPlugin { void handleSwiftDisconnected(const std::string &user, const boost::optional &error) { std::string message = ""; + bool reconnect = false; if (error) { switch(error->getType()) { - case Swift::ClientError::UnknownError: message = ("Unknown Error"); break; + case Swift::ClientError::UnknownError: message = ("Unknown Error"); reconnect = true; break; case Swift::ClientError::DomainNameResolveError: message = ("Unable to find server"); break; case Swift::ClientError::ConnectionError: message = ("Error connecting to server"); break; - case Swift::ClientError::ConnectionReadError: message = ("Error while receiving server data"); break; - case Swift::ClientError::ConnectionWriteError: message = ("Error while sending data to the server"); break; - case Swift::ClientError::XMLError: message = ("Error parsing server data"); break; + case Swift::ClientError::ConnectionReadError: message = ("Error while receiving server data"); reconnect = true; break; + case Swift::ClientError::ConnectionWriteError: message = ("Error while sending data to the server"); reconnect = true; break; + case Swift::ClientError::XMLError: message = ("Error parsing server data"); reconnect = true; break; case Swift::ClientError::AuthenticationFailedError: message = ("Login/password invalid"); break; case Swift::ClientError::CompressionFailedError: message = ("Error while compressing stream"); break; case Swift::ClientError::ServerVerificationFailedError: message = ("Server verification failed"); break; @@ -95,7 +98,7 @@ class SwiftenPlugin : public NetworkPlugin { } } LOG4CXX_INFO(logger, user << ": Disconnected " << message); - handleDisconnected(user, 3, message); + handleDisconnected(user, reconnect ? 0 : 3, message); boost::shared_ptr client = m_users[user]; if (client) { @@ -106,8 +109,10 @@ class SwiftenPlugin : public NetworkPlugin { } #ifndef WIN32 +#ifndef __FreeBSD__ // force returning of memory chunks allocated by libxml2 to kernel malloc_trim(0); +#endif #endif }