Changeset: 621ff2efa51a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=621ff2efa51a
Modified Files:
        configure.ag
        gdk/Makefile.ag
        gdk/gdk_posix.c
Branch: default
Log Message:

MT_getrss: implemented for FreeBSD using kvm_getprocs()


diffs (77 lines):

diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -2352,6 +2352,7 @@ AC_CHECK_HEADERS([crypt.h \
        iconv.h \
        ieeefp.h \
        io.h \
+       kvm.h \
        langinfo.h \
        libgen.h \
        libintl.h \
@@ -2476,6 +2477,10 @@ esac
 
 AC_SUBST(SOCKET_LIBS)
 
+KVM_LIBS=""
+AC_CHECK_LIB(kvm, kvm_open, [ KVM_LIBS="-lkvm" ] )
+AC_SUBST(KVM_LIBS)
+
 dnl     checks for types
 AC_TYPE_SIZE_T
 AC_TYPE_SSIZE_T
diff --git a/gdk/Makefile.ag b/gdk/Makefile.ag
--- a/gdk/Makefile.ag
+++ b/gdk/Makefile.ag
@@ -50,5 +50,5 @@ lib_gdk = {
                ../common/stream/libstream \
                ../common/utils/libmutils \
                $(MATH_LIBS) $(SOCKET_LIBS) $(zlib_LIBS) $(BZ_LIBS) \
-               $(MALLOC_LIBS) $(PTHREAD_LIBS) $(DL_LIBS) $(PSAPILIB)
+               $(MALLOC_LIBS) $(PTHREAD_LIBS) $(DL_LIBS) $(PSAPILIB) 
$(KVM_LIBS)
 }
diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c
--- a/gdk/gdk_posix.c
+++ b/gdk/gdk_posix.c
@@ -53,6 +53,12 @@ extern char *sbrk(int);
 #ifdef HAVE_MACH_MACH_INIT_H
 # include <mach/mach_init.h>
 #endif
+#ifdef HAVE_KVM_H
+# include <kvm.h>
+# include <sys/param.h>
+# include <sys/sysctl.h>
+# include <sys/user.h>
+#endif
 
 #if defined(DEBUG_ALLOC) && SIZEOF_VOID_P > 4
 #undef DEBUG_ALLOC
@@ -781,6 +787,28 @@ MT_getrss(void)
 
        if (task_info(task, TASK_BASIC_INFO_64, (task_info_t)&t_info, 
&t_info_count) != KERN_INVALID_POLICY)
                return t_info.resident_size;  /* bytes */
+#elif defined(HAVE_KVM_H)
+       /* get RSS on FreeBSD */
+       struct kinfo_proc *ki;
+       int ski = 1;
+       kvm_t *kd;
+       size_t rss = 0;
+
+       kd = kvm_open(NULL, "/dev/null", NULL, O_RDONLY, "kvm_open");
+       if (kd == NULL)
+               return 0;
+
+       ki = kvm_getprocs(kd, KERN_PROC_PID, getpid(), &ski);
+       if (ki == NULL) {
+               kvm_close(kd);
+               return 0;
+       }
+
+       rss = ki->ki_rssize;
+
+       kvm_close(kd);
+
+       return rss * MT_pagesize();
 #else
        /* get RSS on Linux */
        static char MT_mmap_procfile[128] = { 0 };
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to