Skip to content

Commit

Permalink
Merge pull request #2371 from cesanta/cloexec
Browse files Browse the repository at this point in the history
Fix #2369 - set CLOEXEC on epoll and regular file fds
  • Loading branch information
scaprile authored Sep 5, 2023
2 parents 2883709 + ca4c2c6 commit 8140ea1
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 8 deletions.
9 changes: 5 additions & 4 deletions mongoose.c
Original file line number Diff line number Diff line change
Expand Up @@ -1004,7 +1004,7 @@ static int p_stat(const char *path, size_t *size, time_t *mtime) {
FILE *fp = _wfopen(tmp, L"rb");
if (fp != NULL) {
fseek(fp, 0, SEEK_END);
if (ftell(fp) > 0) st.st_size = ftell(fp); // Use _ftelli64 on win10+
if (ftell(fp) > 0) st.st_size = ftell(fp); // Use _ftelli64 on win10+
fclose(fp);
}
}
Expand Down Expand Up @@ -1144,7 +1144,7 @@ static void p_list(const char *dir, void (*fn)(const char *, void *),
}

static void *p_open(const char *path, int flags) {
const char *mode = flags == MG_FS_READ ? "rb" : "a+b";
const char *mode = flags == MG_FS_READ ? "rbe" : "a+be"; // e for CLOEXEC
#if MG_ARCH == MG_ARCH_WIN32
wchar_t b1[MG_PATH_MAX], b2[10];
MultiByteToWideChar(CP_UTF8, 0, path, -1, b1, sizeof(b1) / sizeof(b1[0]));
Expand Down Expand Up @@ -3756,7 +3756,7 @@ struct mg_connection *mg_listen(struct mg_mgr *mgr, const char *url,
c->fn = fn;
c->fn_data = fn_data;
mg_call(c, MG_EV_OPEN, NULL);
if (mg_url_is_ssl(url)) c->is_tls = 1; // Accepted connection must
if (mg_url_is_ssl(url)) c->is_tls = 1; // Accepted connection must
MG_DEBUG(("%lu %p %s", c->id, c->fd, url));
}
return c;
Expand Down Expand Up @@ -3806,7 +3806,8 @@ void mg_mgr_free(struct mg_mgr *mgr) {
void mg_mgr_init(struct mg_mgr *mgr) {
memset(mgr, 0, sizeof(*mgr));
#if MG_ENABLE_EPOLL
if ((mgr->epoll_fd = epoll_create1(0)) < 0) MG_ERROR(("epoll: %d", errno));
if ((mgr->epoll_fd = epoll_create1(EPOLL_CLOEXEC)) < 0)
MG_ERROR(("epoll_create1 errno %d", errno));
#else
mgr->epoll_fd = -1;
#endif
Expand Down
4 changes: 2 additions & 2 deletions src/fs_posix.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ static int p_stat(const char *path, size_t *size, time_t *mtime) {
FILE *fp = _wfopen(tmp, L"rb");
if (fp != NULL) {
fseek(fp, 0, SEEK_END);
if (ftell(fp) > 0) st.st_size = ftell(fp); // Use _ftelli64 on win10+
if (ftell(fp) > 0) st.st_size = ftell(fp); // Use _ftelli64 on win10+
fclose(fp);
}
}
Expand Down Expand Up @@ -166,7 +166,7 @@ static void p_list(const char *dir, void (*fn)(const char *, void *),
}

static void *p_open(const char *path, int flags) {
const char *mode = flags == MG_FS_READ ? "rb" : "a+b";
const char *mode = flags == MG_FS_READ ? "rbe" : "a+be"; // e for CLOEXEC
#if MG_ARCH == MG_ARCH_WIN32
wchar_t b1[MG_PATH_MAX], b2[10];
MultiByteToWideChar(CP_UTF8, 0, path, -1, b1, sizeof(b1) / sizeof(b1[0]));
Expand Down
5 changes: 3 additions & 2 deletions src/net.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ struct mg_connection *mg_listen(struct mg_mgr *mgr, const char *url,
c->fn = fn;
c->fn_data = fn_data;
mg_call(c, MG_EV_OPEN, NULL);
if (mg_url_is_ssl(url)) c->is_tls = 1; // Accepted connection must
if (mg_url_is_ssl(url)) c->is_tls = 1; // Accepted connection must
MG_DEBUG(("%lu %p %s", c->id, c->fd, url));
}
return c;
Expand Down Expand Up @@ -238,7 +238,8 @@ void mg_mgr_free(struct mg_mgr *mgr) {
void mg_mgr_init(struct mg_mgr *mgr) {
memset(mgr, 0, sizeof(*mgr));
#if MG_ENABLE_EPOLL
if ((mgr->epoll_fd = epoll_create1(0)) < 0) MG_ERROR(("epoll: %d", errno));
if ((mgr->epoll_fd = epoll_create1(EPOLL_CLOEXEC)) < 0)
MG_ERROR(("epoll_create1 errno %d", errno));
#else
mgr->epoll_fd = -1;
#endif
Expand Down

0 comments on commit 8140ea1

Please sign in to comment.