handle EINTR when waiting for transmit timestamp (#2128786)
Resolves: #2128786
This commit is contained in:
parent
3fbcba0dbb
commit
43e8a98327
|
@ -0,0 +1,30 @@
|
|||
commit c8de9f33e437fb15cff32c0028f651d7cb916a37
|
||||
Author: Miroslav Lichvar <mlichvar@redhat.com>
|
||||
Date: Tue Sep 13 13:44:10 2022 +0200
|
||||
|
||||
sk: Handle EINTR when waiting for transmit timestamp.
|
||||
|
||||
If ptp4l received a signal in poll() waiting for a transmit timestamp,
|
||||
multiple (possibly confusing) error messages are logged before exit.
|
||||
|
||||
If poll() returns with EINTR, call it once again to get the timestamp
|
||||
and avoid logging the errors. Don't call it in a loop to avoid getting
|
||||
stuck in case the timestamp is lost and the signal is repeated before
|
||||
the poll timeout can be reached.
|
||||
|
||||
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
|
||||
|
||||
diff --git a/sk.c b/sk.c
|
||||
index 80075be..d27abff 100644
|
||||
--- a/sk.c
|
||||
+++ b/sk.c
|
||||
@@ -354,6 +354,9 @@ int sk_receive(int fd, void *buf, int buflen,
|
||||
if (flags == MSG_ERRQUEUE) {
|
||||
struct pollfd pfd = { fd, sk_events, 0 };
|
||||
res = poll(&pfd, 1, sk_tx_timeout);
|
||||
+ /* Retry once on EINTR to avoid logging errors before exit */
|
||||
+ if (res < 0 && errno == EINTR)
|
||||
+ res = poll(&pfd, 1, sk_tx_timeout);
|
||||
if (res < 1) {
|
||||
pr_err(res ? "poll for tx timestamp failed: %m" :
|
||||
"timed out while polling for tx timestamp");
|
|
@ -47,6 +47,8 @@ Patch12: linuxptp-vclock.patch
|
|||
Patch13: linuxptp-phcerr.patch
|
||||
# add support for VLAN over bond
|
||||
Patch14: linuxptp-vlanbond.patch
|
||||
# handle EINTR when waiting for transmit timestamp
|
||||
Patch15: linuxptp-eintr.patch
|
||||
|
||||
BuildRequires: gcc gcc-c++ make systemd
|
||||
|
||||
|
@ -74,6 +76,7 @@ Supporting legacy APIs and other platforms is not a goal.
|
|||
%patch12 -p1 -b .vclock
|
||||
%patch13 -p1 -b .phcerr
|
||||
%patch14 -p1 -b .vlanbond
|
||||
%patch15 -p1 -b .eintr
|
||||
mv linuxptp-testsuite-%{testsuite_ver}* testsuite
|
||||
mv clknetsim-%{clknetsim_ver}* testsuite/clknetsim
|
||||
|
||||
|
|
Loading…
Reference in New Issue