aboutsummaryrefslogtreecommitdiff
path: root/www/seamonkey/files/patch-bug791366
diff options
context:
space:
mode:
Diffstat (limited to 'www/seamonkey/files/patch-bug791366')
-rw-r--r--www/seamonkey/files/patch-bug79136695
1 files changed, 95 insertions, 0 deletions
diff --git a/www/seamonkey/files/patch-bug791366 b/www/seamonkey/files/patch-bug791366
new file mode 100644
index 000000000000..90e9e523bbbe
--- /dev/null
+++ b/www/seamonkey/files/patch-bug791366
@@ -0,0 +1,95 @@
+diff --git mozilla/xpcom/base/nsMemoryReporterManager.cpp mozilla/xpcom/base/nsMemoryReporterManager.cpp
+index a9aff58..674e757 100644
+--- mozilla/xpcom/base/nsMemoryReporterManager.cpp
++++ mozilla/xpcom/base/nsMemoryReporterManager.cpp
+@@ -32,7 +32,7 @@ using namespace mozilla;
+ # include "jemalloc.h"
+ #endif // MOZ_MEMORY
+
+-#if defined(XP_LINUX) || defined(XP_MACOSX) || defined(SOLARIS)
++#ifdef XP_UNIX
+
+ #include <sys/time.h>
+ #include <sys/resource.h>
+@@ -95,6 +95,81 @@ static nsresult GetResident(PRInt64 *n)
+ return GetProcSelfStatmField(1, n);
+ }
+
++#elif defined(__DragonFly__) || defined(__FreeBSD__) \
++ || defined(__NetBSD__) || defined(__OpenBSD__)
++
++#include <sys/param.h>
++#include <sys/sysctl.h>
++#if defined(__DragonFly__) || defined(__FreeBSD__)
++#include <sys/user.h>
++#endif
++
++#include <unistd.h>
++
++#if defined(__NetBSD__)
++#undef KERN_PROC
++#define KERN_PROC KERN_PROC2
++#define KINFO_PROC struct kinfo_proc2
++#else
++#define KINFO_PROC struct kinfo_proc
++#endif
++
++#if defined(__DragonFly__)
++#define KP_SIZE(kp) (kp.kp_vm_map_size)
++#define KP_RSS(kp) (kp.kp_vm_rssize * getpagesize())
++#elif defined(__FreeBSD__)
++#define KP_SIZE(kp) (kp.ki_size)
++#define KP_RSS(kp) (kp.ki_rssize * getpagesize())
++#elif defined(__NetBSD__)
++#define KP_SIZE(kp) (kp.p_vm_msize * getpagesize())
++#define KP_RSS(kp) (kp.p_vm_rssize * getpagesize())
++#elif defined(__OpenBSD__)
++#define KP_SIZE(kp) ((kp.p_vm_dsize + kp.p_vm_ssize \
++ + kp.p_vm_tsize) * getpagesize())
++#define KP_RSS(kp) (kp.p_vm_rssize * getpagesize())
++#endif
++
++static nsresult GetKinfoProcSelf(KINFO_PROC *proc)
++{
++ int mib[] = {
++ CTL_KERN,
++ KERN_PROC,
++ KERN_PROC_PID,
++ getpid(),
++#if defined(__NetBSD__) || defined(__OpenBSD__)
++ sizeof(KINFO_PROC),
++ 1,
++#endif
++ };
++ u_int miblen = sizeof(mib) / sizeof(mib[0]);
++ size_t size = sizeof(KINFO_PROC);
++ if (sysctl(mib, miblen, proc, &size, NULL, 0))
++ return NS_ERROR_FAILURE;
++
++ return NS_OK;
++}
++
++#define HAVE_VSIZE_AND_RESIDENT_REPORTERS 1
++static nsresult GetVsize(PRInt64 *n)
++{
++ KINFO_PROC proc;
++ nsresult rv = GetKinfoProcSelf(&proc);
++ if (NS_SUCCEEDED(rv))
++ *n = KP_SIZE(proc);
++
++ return rv;
++}
++
++static nsresult GetResident(PRInt64 *n)
++{
++ KINFO_PROC proc;
++ nsresult rv = GetKinfoProcSelf(&proc);
++ if (NS_SUCCEEDED(rv))
++ *n = KP_RSS(proc);
++
++ return rv;
++}
++
+ #elif defined(SOLARIS)
+
+ #include <procfs.h>