diff --git a/ChangeLog b/ChangeLog
index d121f220adb3d7820732b331239ef3e0b24641a2..62572600ad22c828dbcaf10d138f6d811d833a99 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -71,6 +71,9 @@ Changes in version 0.2.2.7-alpha - 2010-01-??
       but there is non-exit bandwidth, or no guard bandwidth but there
       is non-guard bandwidth, don't crash during path selection. Bugfix
       on 0.2.0.3-alpha.
+    - Fix compilation on Solaris by removing support for the
+      DisableAllSwap config option. Solaris doesn't have an rlimit for
+      mlockall, so we cannot use it safely. Bugfix on 0.2.2.6-alpha.
 
   o Removed features:
     - Remove the HSAuthorityRecordStats option that version 0 hidden
diff --git a/src/common/compat.c b/src/common/compat.c
index b221e4e640c3baab1310377f2061cfe2ccf879ea..d45fda0be34a03a73e8d787f8190853ded2b59e5 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -2176,7 +2176,7 @@ tor_threads_init(void)
 }
 #endif
 
-#if defined(HAVE_MLOCKALL) && HAVE_DECL_MLOCKALL
+#if defined(HAVE_MLOCKALL) && HAVE_DECL_MLOCKALL && defined(RLIMIT_MEMLOCK)
 /** Attempt to raise the current and max rlimit to infinity for our process.
  * This only needs to be done once and can probably only be done when we have
  * not already dropped privileges.
@@ -2244,7 +2244,7 @@ tor_mlockall(void)
    * http://msdn.microsoft.com/en-us/library/aa366895(VS.85).aspx
    */
 
-#if defined(HAVE_MLOCKALL) && HAVE_DECL_MLOCKALL
+#if defined(HAVE_MLOCKALL) && HAVE_DECL_MLOCKALL && defined(RLIMIT_MEMLOCK)
   if (tor_set_max_memlock() == 0) {
     /* Perhaps we only want to log this if we're in a verbose mode? */
     log_notice(LD_GENERAL, "RLIMIT_MEMLOCK is now set to RLIM_INFINITY.");