Skip to content

Commit

Permalink
USE_JEMALLOC in the OSS build if we have jemalloc
Browse files Browse the repository at this point in the history
Summary:
Nothing defines USE_JEMALLOC in the OSS build today and that causes
some portability problems.

Specifically, the homebrew recipe will make libjemalloc available and our
configure script will detect it and add it to the library flags.

Our subsequent check for `malloc_usable_size` then finds this function in
libjemalloc.

When later attempting to build wangle against the homebrew folly we get
compilation failures because the prototype for `malloc_usable_size` is only
available in the jemalloc headers and nothing in the saved configuration for
folly is set up for this to be pulled in as it it guarded by `USE_JEMALLOC`.

This attempts to resolve the situation by forcing on `USE_JEMALLOC` when
we detect the library in configure.

This is made a little more complicated because we cannot set `USE_JEMALLOC`
in the OSS build; it gets rewritten to have a `FOLLY_` prefix.  Since we
have code outside of folly that requires that this symbol be `USE_JEMALLOC`,
I've changed the conditional to check for both flavors of the symbol, with
and without the prefix.

Reviewed By: yfeldblum

Differential Revision: D4289176

fbshipit-source-id: 756bc815c3ef1fac454e603feb72155d98c5aadd
  • Loading branch information
wez authored and Facebook Github Bot committed Dec 7, 2016
1 parent 77d5e54 commit e44d8a6
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
10 changes: 9 additions & 1 deletion folly/configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,15 @@ AC_CHECK_LIB([double-conversion],[ceil],[],[AC_MSG_ERROR(
AC_CHECK_LIB([event], [event_set], [], [AC_MSG_ERROR([Unable to find libevent])])
FB_CHECK_PKG_CONFIG([EVENT], [libevent])

AC_CHECK_LIB([jemalloc], [xallocx])
AC_ARG_WITH([jemalloc], [
--with-jemalloc Whether to make folly jemalloc aware
],[
AC_CHECK_LIB([jemalloc], [xallocx],[
AC_DEFINE([USE_JEMALLOC], [1], [Enable jemalloc])
],[
AC_MSG_ERROR([--with-jemalloc requested, but jemalloc not found])
])
])

# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
Expand Down
2 changes: 1 addition & 1 deletion folly/portability/Malloc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

#include <folly/portability/Malloc.h>

#ifndef USE_JEMALLOC
#if !defined(USE_JEMALLOC) && !defined(FOLLY_USE_JEMALLOC)
#if defined(__APPLE__) && !defined(FOLLY_HAVE_MALLOC_USABLE_SIZE)
#include <malloc/malloc.h>

Expand Down
5 changes: 2 additions & 3 deletions folly/portability/Malloc.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@

#pragma once

#include <folly/portability/Config.h>
#include <stdlib.h>

#ifdef USE_JEMALLOC
#if defined(USE_JEMALLOC) || defined(FOLLY_USE_JEMALLOC)
// JEMalloc provides it's own implementation of
// malloc_usable_size, and that's what we should be using.
#include <jemalloc/jemalloc.h>
Expand All @@ -27,8 +28,6 @@
#include <malloc.h>
#endif

#include <folly/portability/Config.h>

#if defined(__APPLE__) && !defined(FOLLY_HAVE_MALLOC_USABLE_SIZE)
// MacOS doesn't have malloc_usable_size()
extern "C" size_t malloc_usable_size(void* ptr);
Expand Down

0 comments on commit e44d8a6

Please sign in to comment.