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