unix: handle EINTR in uv_resident_set_memory on AIX and SunOS

This commit is contained in:
Nandan Acharya 2026-02-22 22:48:16 +05:30
parent 12d0dd48e3
commit ff645d3aa2
2 changed files with 16 additions and 4 deletions

View File

@ -997,6 +997,7 @@ void uv__process_title_cleanup(void) {
int uv_resident_set_memory(size_t* rss) { int uv_resident_set_memory(size_t* rss) {
char pp[64]; char pp[64];
psinfo_t psinfo; psinfo_t psinfo;
ssize_t nread;
int err; int err;
int fd; int fd;
@ -1006,11 +1007,16 @@ int uv_resident_set_memory(size_t* rss) {
if (fd == -1) if (fd == -1)
return UV__ERR(errno); return UV__ERR(errno);
/* FIXME(bnoordhuis) Handle EINTR. */ do
nread = read(fd, &psinfo, sizeof(psinfo));
while (nread == -1 && errno == EINTR);
err = UV_EINVAL; err = UV_EINVAL;
if (read(fd, &psinfo, sizeof(psinfo)) == sizeof(psinfo)) { if (nread == (ssize_t) sizeof(psinfo)) {
*rss = (size_t)psinfo.pr_rssize * 1024; *rss = (size_t)psinfo.pr_rssize * 1024;
err = 0; err = 0;
} else if (nread < 0) {
err = UV__ERR(errno);
} }
uv__close(fd); uv__close(fd);

View File

@ -612,6 +612,7 @@ void uv__fs_event_close(uv_fs_event_t* handle) {
int uv_resident_set_memory(size_t* rss) { int uv_resident_set_memory(size_t* rss) {
psinfo_t psinfo; psinfo_t psinfo;
ssize_t nread;
int err; int err;
int fd; int fd;
@ -619,11 +620,16 @@ int uv_resident_set_memory(size_t* rss) {
if (fd == -1) if (fd == -1)
return UV__ERR(errno); return UV__ERR(errno);
/* FIXME(bnoordhuis) Handle EINTR. */ do
nread = read(fd, &psinfo, sizeof(psinfo));
while (nread == -1 && errno == EINTR);
err = UV_EINVAL; err = UV_EINVAL;
if (read(fd, &psinfo, sizeof(psinfo)) == sizeof(psinfo)) { if (nread == (ssize_t) sizeof(psinfo)) {
*rss = (size_t)psinfo.pr_rssize * 1024; *rss = (size_t)psinfo.pr_rssize * 1024;
err = 0; err = 0;
} else if (nread < 0) {
err = UV__ERR(errno);
} }
uv__close(fd); uv__close(fd);