Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
mongoose
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
esp
mongoose
Commits
fb04203b
Commit
fb04203b
authored
7 years ago
by
Ruslan Valiullin
Committed by
Cesanta Bot
7 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix eintr, zombie
PUBLISHED_FROM=f6d7d0f9c6de8ffeeb3bcd8aace6c1434281ddf7
parent
4172c190
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
44 additions
and
17 deletions
+44
-17
mongoose.c
mongoose.c
+44
-17
No files found.
mongoose.c
View file @
fb04203b
...
...
@@ -3582,9 +3582,7 @@ void mg_socket_if_init(struct mg_iface *iface) {
(
void
)
iface
;
DBG
((
"%p using select()"
,
iface
->
mgr
));
#if MG_ENABLE_BROADCAST
do
{
mg_socketpair
(
iface
->
mgr
->
ctl
,
SOCK_DGRAM
);
}
while
(
iface
->
mgr
->
ctl
[
0
]
==
INVALID_SOCKET
);
mg_socketpair
(
iface
->
mgr
->
ctl
,
SOCK_DGRAM
);
#endif
}
...
...
@@ -3742,6 +3740,27 @@ time_t mg_socket_if_poll(struct mg_iface *iface, int timeout_ms) {
}
#if MG_ENABLE_BROADCAST
MG_INTERNAL
void
mg_socketpair_close
(
sock_t
*
sock
)
{
while
(
1
)
{
if
(
closesocket
(
*
sock
)
==
-
1
&&
errno
==
EINTR
)
continue
;
break
;
}
*
sock
=
INVALID_SOCKET
;
}
MG_INTERNAL
sock_t
mg_socketpair_accept
(
sock_t
sock
,
union
socket_address
*
sa
,
socklen_t
sa_len
)
{
sock_t
rc
;
while
(
1
)
{
if
((
rc
=
accept
(
sock
,
&
sa
->
sa
,
&
sa_len
))
==
INVALID_SOCKET
&&
errno
==
EINTR
)
continue
;
break
;
}
return
rc
;
}
int
mg_socketpair
(
sock_t
sp
[
2
],
int
sock_type
)
{
union
socket_address
sa
;
sock_t
sock
;
...
...
@@ -3765,20 +3784,19 @@ int mg_socketpair(sock_t sp[2], int sock_type) {
(
getsockname
(
sp
[
0
],
&
sa
.
sa
,
&
len
)
!=
0
||
connect
(
sock
,
&
sa
.
sa
,
len
)
!=
0
))
{
}
else
if
((
sp
[
1
]
=
(
sock_type
==
SOCK_DGRAM
?
sock
:
accept
(
sock
,
&
sa
.
sa
,
&
len
)))
==
:
mg_socketpair_accept
(
sock
,
&
sa
,
len
)))
==
INVALID_SOCKET
)
{
}
else
{
mg_set_close_on_exec
(
sp
[
0
]);
mg_set_close_on_exec
(
sp
[
1
]);
if
(
sock_type
==
SOCK_STREAM
)
closesocket
(
sock
);
if
(
sock_type
==
SOCK_STREAM
)
mg_socketpair_close
(
&
sock
);
ret
=
1
;
}
if
(
!
ret
)
{
if
(
sp
[
0
]
!=
INVALID_SOCKET
)
closesocket
(
sp
[
0
]);
if
(
sp
[
1
]
!=
INVALID_SOCKET
)
closesocket
(
sp
[
1
]);
if
(
sock
!=
INVALID_SOCKET
)
closesocket
(
sock
);
sock
=
sp
[
0
]
=
sp
[
1
]
=
INVALID_SOCKET
;
if
(
sp
[
0
]
!=
INVALID_SOCKET
)
mg_socketpair_close
(
&
sp
[
0
]);
if
(
sp
[
1
]
!=
INVALID_SOCKET
)
mg_socketpair_close
(
&
sp
[
1
]);
if
(
sock
!=
INVALID_SOCKET
)
mg_socketpair_close
(
&
sock
);
}
return
ret
;
...
...
@@ -7929,6 +7947,10 @@ void mg_register_http_endpoint(struct mg_connection *nc, const char *uri_path,
* All rights reserved
*/
#ifndef _WIN32
#include <signal.h>
#endif
#if MG_ENABLE_HTTP && MG_ENABLE_HTTP_CGI
#ifndef MG_MAX_CGI_ENVIR_VARS
...
...
@@ -8379,14 +8401,19 @@ MG_INTERNAL void mg_handle_cgi(struct mg_connection *nc, const char *prog,
prog
=
p
+
1
;
}
/*
* Try to create socketpair in a loop until success. mg_socketpair()
* can be interrupted by a signal and fail.
* TODO(lsm): use sigaction to restart interrupted syscall
*/
do
{
mg_socketpair
(
fds
,
SOCK_STREAM
);
}
while
(
fds
[
0
]
==
INVALID_SOCKET
);
if
(
!
mg_socketpair
(
fds
,
SOCK_STREAM
))
{
nc
->
flags
|=
MG_F_CLOSE_IMMEDIATELY
;
return
;
}
#ifndef _WIN32
struct
sigaction
sa
;
sigemptyset
(
&
sa
.
sa_mask
);
sa
.
sa_handler
=
SIG_IGN
;
sa
.
sa_flags
=
0
;
sigaction
(
SIGCHLD
,
&
sa
,
NULL
);
#endif
if
(
mg_start_process
(
opts
->
cgi_interpreter
,
prog
,
blk
.
buf
,
blk
.
vars
,
dir
,
fds
[
1
])
!=
0
)
{
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment