Skip to content

Commit f88d39d

Browse files
committed
getmem() for solaris
1 parent faefb3f commit f88d39d

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

src/node.cc

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,50 @@ v8::Handle<v8::Value> Exit(const v8::Arguments& args) {
475475
return Undefined();
476476
}
477477

478+
#ifdef __sun
479+
#define HAVE_GETMEM 1
480+
#include <unistd.h> /* getpagesize() */
481+
482+
#if (!defined(_LP64)) && (_FILE_OFFSET_BITS - 0 == 64)
483+
#define PROCFS_FILE_OFFSET_BITS_HACK 1
484+
#undef _FILE_OFFSET_BITS
485+
#else
486+
#define PROCFS_FILE_OFFSET_BITS_HACK 0
487+
#endif
488+
489+
#include <procfs.h>
490+
491+
#if (PROCFS_FILE_OFFSET_BITS_HACK - 0 == 1)
492+
#define _FILE_OFFSET_BITS 64
493+
#endif
494+
495+
int getmem(size_t *rss, size_t *vsize) {
496+
pid_t pid = getpid();
497+
498+
size_t page_size = getpagesize();
499+
char pidpath[1024];
500+
sprintf(pidpath, "/proc/%d/psinfo", pid);
501+
502+
psinfo_t psinfo;
503+
FILE *f = fopen(pidpath, "r");
504+
if (!f) return -1;
505+
506+
if (fread(&psinfo, sizeof(psinfo_t), 1, f) != 1) {
507+
fclose (f);
508+
return -1;
509+
}
510+
511+
/* XXX correct? */
512+
513+
*vsize = (size_t) psinfo.pr_size * page_size;
514+
*rss = (size_t) psinfo.pr_rssize * 1024;
515+
516+
fclose (f);
517+
518+
return 0;
519+
}
520+
#endif
521+
478522

479523
#ifdef __FreeBSD__
480524
#define HAVE_GETMEM 1

0 commit comments

Comments
 (0)