Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
cellframe-sdk
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Code
Merge requests
16
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
cellframe
cellframe-sdk
Commits
1bd4525a
Commit
1bd4525a
authored
4 years ago
by
Dmitriy A. Gerasimov
Browse files
Options
Downloads
Patches
Plain Diff
[*] Fixed situation with non-empty buffer for output when remote client disconnected
parent
0a195263
No related branches found
No related tags found
4 merge requests
!251
Master
,
!250
Master
,
!193
bugs-4442
,
!190
Feature 4453
Pipeline
#5067
passed with stage
in 15 seconds
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
dap-sdk/net/core/dap_events_socket.c
+11
-2
11 additions, 2 deletions
dap-sdk/net/core/dap_events_socket.c
dap-sdk/net/core/dap_worker.c
+13
-1
13 additions, 1 deletion
dap-sdk/net/core/dap_worker.c
with
24 additions
and
3 deletions
dap-sdk/net/core/dap_events_socket.c
+
11
−
2
View file @
1bd4525a
...
...
@@ -187,6 +187,7 @@ dap_events_socket_t * s_create_type_pipe(dap_worker_t * a_w, dap_events_socket_c
int
l_pipe
[
2
];
int
l_errno
;
char
l_errbuf
[
128
];
l_errbuf
[
0
]
=
0
;
if
(
pipe
(
l_pipe
)
<
0
){
l_errno
=
errno
;
strerror_r
(
l_errno
,
l_errbuf
,
sizeof
(
l_errbuf
));
...
...
@@ -253,6 +254,7 @@ dap_events_socket_t * s_create_type_queue_ptr(dap_worker_t * a_w, dap_events_soc
int
l_pipe
[
2
];
int
l_errno
;
char
l_errbuf
[
128
];
l_errbuf
[
0
]
=
0
;
if
(
pipe2
(
l_pipe
,
O_DIRECT
|
O_NONBLOCK
)
<
0
){
l_errno
=
errno
;
strerror_r
(
l_errno
,
l_errbuf
,
sizeof
(
l_errbuf
));
...
...
@@ -290,7 +292,8 @@ dap_events_socket_t * s_create_type_queue_ptr(dap_worker_t * a_w, dap_events_soc
l_es
->
mqd
=
mq_open
(
l_mq_name
,
O_CREAT
|
O_RDWR
,
S_IRWXU
,
&
l_mq_attr
);
if
(
l_es
->
mqd
==
-
1
){
int
l_errno
=
errno
;
char
l_errbuf
[
128
]
=
{
0
};
char
l_errbuf
[
128
];
l_errbuf
[
0
]
=
0
;
strerror_r
(
l_errno
,
l_errbuf
,
sizeof
(
l_errbuf
)
);
DAP_DELETE
(
l_es
);
l_es
=
NULL
;
...
...
@@ -357,7 +360,8 @@ int dap_events_socket_queue_proc_input_unsafe(dap_events_socket_t * a_esocket)
ssize_t
l_ret
=
mq_timedreceive
(
a_esocket
->
mqd
,(
char
*
)
&
l_queue_ptr
,
sizeof
(
l_queue_ptr
),
NULL
,
&
s_timeout
);
if
(
l_ret
==
-
1
){
int
l_errno
=
errno
;
char
l_errbuf
[
128
]
=
{
0
};
char
l_errbuf
[
128
];
l_errbuf
[
0
]
=
0
;
strerror_r
(
l_errno
,
l_errbuf
,
sizeof
(
l_errbuf
));
log_it
(
L_ERROR
,
"Error in esocket queue_ptr:
\"
%s
\"
code %d"
,
l_errbuf
,
l_errno
);
return
-
1
;
...
...
@@ -398,6 +402,7 @@ dap_events_socket_t * s_create_type_event(dap_worker_t * a_w, dap_events_socket_
if
((
l_es
->
fd
=
eventfd
(
0
,
0
)
)
<
0
){
int
l_errno
=
errno
;
char
l_errbuf
[
128
];
l_errbuf
[
0
]
=
0
;
strerror_r
(
l_errno
,
l_errbuf
,
sizeof
(
l_errbuf
));
switch
(
l_errno
)
{
case
EINVAL
:
log_it
(
L_CRITICAL
,
"An unsupported value was specified in flags:
\"
%s
\"
(%d)"
,
l_errbuf
,
l_errno
);
break
;
...
...
@@ -459,6 +464,7 @@ void dap_events_socket_event_proc_input_unsafe(dap_events_socket_t *a_esocket)
}
else
if
(
(
errno
!=
EAGAIN
)
&&
(
errno
!=
EWOULDBLOCK
)
){
// we use blocked socket for now but who knows...
int
l_errno
=
errno
;
char
l_errbuf
[
128
];
l_errbuf
[
0
]
=
0
;
strerror_r
(
l_errno
,
l_errbuf
,
sizeof
(
l_errbuf
));
log_it
(
L_WARNING
,
"Can't read packet from event fd:
\"
%s
\"
(%d)"
,
l_errbuf
,
l_errno
);
}
else
...
...
@@ -484,6 +490,7 @@ int dap_events_socket_queue_ptr_send( dap_events_socket_t * a_es, void* a_arg)
return
0
;
else
{
char
l_errbuf
[
128
];
l_errbuf
[
0
]
=
0
;
strerror_r
(
l_errno
,
l_errbuf
,
sizeof
(
l_errbuf
));
log_it
(
L_ERROR
,
"Can't send ptr to queue:
\"
%s
\"
code %d"
,
l_errbuf
,
l_errno
);
return
l_errno
;
...
...
@@ -623,6 +630,7 @@ void dap_events_socket_set_readable_unsafe( dap_events_socket_t *sc, bool is_rea
if
(
epoll_ctl
(
sc
->
worker
->
epoll_fd
,
EPOLL_CTL_MOD
,
sc
->
socket
,
&
sc
->
ev
)
==
-
1
){
int
l_errno
=
errno
;
char
l_errbuf
[
128
];
l_errbuf
[
0
]
=
0
;
strerror_r
(
l_errno
,
l_errbuf
,
sizeof
(
l_errbuf
));
log_it
(
L_ERROR
,
"Can't update read client socket state in the epoll_fd:
\"
%s
\"
(%d)"
,
l_errbuf
,
l_errno
);
}
...
...
@@ -659,6 +667,7 @@ void dap_events_socket_set_writable_unsafe( dap_events_socket_t *sc, bool a_is_r
if
(
epoll_ctl
(
sc
->
worker
->
epoll_fd
,
EPOLL_CTL_MOD
,
sc
->
socket
,
&
sc
->
ev
)
){
int
l_errno
=
errno
;
char
l_errbuf
[
128
];
l_errbuf
[
0
]
=
0
;
strerror_r
(
l_errno
,
l_errbuf
,
sizeof
(
l_errbuf
));
log_it
(
L_ERROR
,
"Can't update write client socket state in the epoll_fd %d:
\"
%s
\"
(%d)"
,
sc
->
worker
->
epoll_fd
,
l_errbuf
,
l_errno
);
...
...
This diff is collapsed.
Click to expand it.
dap-sdk/net/core/dap_worker.c
+
13
−
1
View file @
1bd4525a
...
...
@@ -134,6 +134,9 @@ void *dap_worker_thread(void *arg)
//if(!(events[n].events & EPOLLIN))
//cur->no_close = false;
if
(
l_sock_err
)
{
dap_events_socket_set_readable_unsafe
(
l_cur
,
false
);
dap_events_socket_set_writable_unsafe
(
l_cur
,
false
);
l_cur
->
buf_out_size
=
0
;
l_cur
->
flags
|=
DAP_SOCK_SIGNAL_CLOSE
;
log_it
(
L_INFO
,
"Socket shutdown (EPOLLHUP): %s"
,
strerror
(
l_sock_err
));
}
...
...
@@ -150,6 +153,9 @@ void *dap_worker_thread(void *arg)
log_it
(
L_ERROR
,
"Socket error: %s"
,
strerror
(
l_sock_err
));
default:
;
}
dap_events_socket_set_readable_unsafe
(
l_cur
,
false
);
dap_events_socket_set_writable_unsafe
(
l_cur
,
false
);
l_cur
->
buf_out_size
=
0
;
l_cur
->
flags
|=
DAP_SOCK_SIGNAL_CLOSE
;
l_cur
->
callbacks
.
error_callback
(
l_cur
,
0
);
// Call callback to process error event
}
...
...
@@ -157,7 +163,10 @@ void *dap_worker_thread(void *arg)
if
(
l_epoll_events
[
n
].
events
&
EPOLLRDHUP
)
{
log_it
(
L_INFO
,
"Client socket disconnected"
);
dap_events_socket_set_readable_unsafe
(
l_cur
,
false
);
dap_events_socket_set_writable_unsafe
(
l_cur
,
false
);
l_cur
->
buf_out_size
=
0
;
l_cur
->
flags
|=
DAP_SOCK_SIGNAL_CLOSE
;
}
if
(
l_epoll_events
[
n
].
events
&
EPOLLIN
)
{
...
...
@@ -244,6 +253,7 @@ void *dap_worker_thread(void *arg)
log_it
(
L_ERROR
,
"Some error occured in recv() function: %s"
,
strerror
(
errno
));
dap_events_socket_set_readable_unsafe
(
l_cur
,
false
);
l_cur
->
flags
|=
DAP_SOCK_SIGNAL_CLOSE
;
l_cur
->
buf_out_size
=
0
;
}
}
else
if
(
!
(
l_epoll_events
[
n
].
events
&
EPOLLRDHUP
)
||
!
(
l_epoll_events
[
n
].
events
&
EPOLLERR
))
{
...
...
@@ -308,6 +318,8 @@ void *dap_worker_thread(void *arg)
if
(
l_errno
!=
EAGAIN
&&
l_errno
!=
EWOULDBLOCK
){
// If we have non-blocking socket
log_it
(
L_ERROR
,
"Some error occured in send(): %s"
,
strerror
(
errno
));
l_cur
->
flags
|=
DAP_SOCK_SIGNAL_CLOSE
;
l_cur
->
buf_out_size
=
0
;
}
}
else
{
...
...
@@ -349,7 +361,7 @@ void *dap_worker_thread(void *arg)
}
}
// while
log_it
(
L_NOTICE
,
"Exiting thread #%u"
,
l_worker
->
id
);
return
NULL
;
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment