summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2015-11-13 15:50:56 -0500
committerMark Benvenuto <mark.benvenuto@mongodb.com>2015-11-17 18:15:07 -0500
commit2508a0f3deb4d62b53d76734ca70ca294443629f (patch)
tree53abfa9faa1d493bd1665c4166c99babf617171f
parent2695170d3f4ea843103cc901597ff26cee0c3326 (diff)
downloadmongo-2508a0f3deb4d62b53d76734ca70ca294443629f.tar.gz
SERVER-21216 Fix FreeBSD & OpenBSD compilation, add stack_locator
-rw-r--r--src/mongo/platform/stack_locator_freebsd.cpp31
-rw-r--r--src/mongo/platform/stack_locator_openbsd.cpp27
-rw-r--r--src/mongo/platform/stack_locator_pthread_getattr_np.cpp7
-rw-r--r--src/mongo/platform/stack_locator_unknown.cpp2
-rw-r--r--src/mongo/util/net/hostname_canonicalization.cpp1
5 files changed, 62 insertions, 6 deletions
diff --git a/src/mongo/platform/stack_locator_freebsd.cpp b/src/mongo/platform/stack_locator_freebsd.cpp
index af46f763783..f7f06abba25 100644
--- a/src/mongo/platform/stack_locator_freebsd.cpp
+++ b/src/mongo/platform/stack_locator_freebsd.cpp
@@ -26,4 +26,33 @@
* it in the license file.
*/
-#include "stack_locator_unknown.cpp"
+#include "mongo/platform/basic.h"
+
+#include "mongo/platform/stack_locator.h"
+
+#include <pthread.h>
+#include <pthread_np.h>
+
+#include "mongo/util/assert_util.h"
+#include "mongo/util/scopeguard.h"
+
+namespace mongo {
+
+StackLocator::StackLocator() {
+ pthread_attr_t attr;
+ size_t size;
+
+ pthread_t self = pthread_self();
+
+ invariant(pthread_attr_init(&attr) == 0);
+ ON_BLOCK_EXIT(pthread_attr_destroy, &attr);
+
+ invariant(pthread_attr_get_np(self, &attr) == 0);
+
+ invariant(pthread_attr_getstack(&attr, &_end, &size) == 0);
+
+ // TODO: Assumes stack grows downward on FreeBSD
+ _begin = static_cast<char*>(_end) + size;
+}
+
+} // namespace mongo
diff --git a/src/mongo/platform/stack_locator_openbsd.cpp b/src/mongo/platform/stack_locator_openbsd.cpp
index af46f763783..014edeaa247 100644
--- a/src/mongo/platform/stack_locator_openbsd.cpp
+++ b/src/mongo/platform/stack_locator_openbsd.cpp
@@ -26,4 +26,29 @@
* it in the license file.
*/
-#include "stack_locator_unknown.cpp"
+#include "mongo/platform/basic.h"
+
+#include "mongo/platform/stack_locator.h"
+
+#include <pthread_np.h>
+#include <sys/signal.h>
+
+#include "mongo/util/assert_util.h"
+#include "mongo/util/scopeguard.h"
+
+namespace mongo {
+
+StackLocator::StackLocator() {
+ stack_t stack_info;
+
+ pthread_t self = pthread_self();
+
+ invariant(pthread_stackseg_np(self, &stack_info) == 0);
+
+ _begin = stack_info.ss_sp;
+
+ // TODO: Assumes stack grows downward on OpenBSD
+ _end = static_cast<char*>(_begin) - stack_info.ss_size;
+}
+
+} // namespace mongo
diff --git a/src/mongo/platform/stack_locator_pthread_getattr_np.cpp b/src/mongo/platform/stack_locator_pthread_getattr_np.cpp
index 00961d06286..648d26a41cc 100644
--- a/src/mongo/platform/stack_locator_pthread_getattr_np.cpp
+++ b/src/mongo/platform/stack_locator_pthread_getattr_np.cpp
@@ -33,20 +33,21 @@
#include <pthread.h>
#include "mongo/util/assert_util.h"
+#include "mongo/util/scopeguard.h"
namespace mongo {
StackLocator::StackLocator() {
pthread_t self = pthread_self();
pthread_attr_t selfAttrs;
- pthread_attr_init(&selfAttrs);
- pthread_getattr_np(self, &selfAttrs);
+ invariant(pthread_attr_init(&selfAttrs) == 0);
+ invariant(pthread_getattr_np(self, &selfAttrs) == 0);
+ ON_BLOCK_EXIT(pthread_attr_destroy, &selfAttrs);
void* base = nullptr;
size_t size = 0;
auto result = pthread_attr_getstack(&selfAttrs, &base, &size);
- pthread_attr_destroy(&selfAttrs);
invariant(result == 0);
invariant(base != nullptr);
diff --git a/src/mongo/platform/stack_locator_unknown.cpp b/src/mongo/platform/stack_locator_unknown.cpp
index fd3fb62c993..8f5708a20ec 100644
--- a/src/mongo/platform/stack_locator_unknown.cpp
+++ b/src/mongo/platform/stack_locator_unknown.cpp
@@ -36,4 +36,4 @@ namespace mongo {
StackLocator::StackLocator() = default;
-// namespace mongo
+} // namespace mongo
diff --git a/src/mongo/util/net/hostname_canonicalization.cpp b/src/mongo/util/net/hostname_canonicalization.cpp
index afeeef45280..e7c0eecdcda 100644
--- a/src/mongo/util/net/hostname_canonicalization.cpp
+++ b/src/mongo/util/net/hostname_canonicalization.cpp
@@ -34,6 +34,7 @@
#if !defined(_WIN32)
#include <arpa/inet.h>
+#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>