Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ycai
simbricks
Commits
9282bd32
"notebooks/vscode:/vscode.git/clone" did not exist on "9d4173462999fce5b0b4cf5377e13bc972369a8e"
Commit
9282bd32
authored
Aug 24, 2021
by
Antoine Kaufmann
Browse files
dist/common: debug checks for NetPeerReport and NetEntryReceived
parent
0979a67a
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
49 additions
and
7 deletions
+49
-7
dist/common/net.c
dist/common/net.c
+49
-7
No files found.
dist/common/net.c
View file @
9282bd32
...
...
@@ -236,10 +236,40 @@ int NetPeerSetupNetQueues(struct Peer *peer) {
}
int
NetPeerReport
(
struct
Peer
*
peer
,
uint32_t
written_pos
,
uint32_t
clean_pos
)
{
uint32_t
pos
=
peer
->
local_pos_cleaned
;
if
(
written_pos
==
peer
->
cleanup_pos_last
&&
clean_pos
==
p
eer
->
local_pos_cleaned
)
clean_pos
==
p
os
)
return
0
;
// make sure there are not suddenly fewer entries to be cleaned up
uint32_t
n_before
=
(
peer
->
cleanup_pos_reported
<=
peer
->
cleanup_pos_last
?
peer
->
cleanup_pos_last
-
peer
->
cleanup_pos_reported
:
peer
->
cleanup_enum
-
peer
->
cleanup_pos_reported
+
peer
->
cleanup_pos_last
);
uint32_t
n_after
=
(
peer
->
cleanup_pos_reported
<=
written_pos
?
written_pos
-
peer
->
cleanup_pos_reported
:
peer
->
cleanup_enum
-
peer
->
cleanup_pos_reported
+
written_pos
);
if
(
n_before
>
n_after
)
{
fprintf
(
stderr
,
"PeerReport: BUG fewer entries to clean up after report: "
"peer %s written %u -> %u, cleaned %u -> %u
\n
"
,
peer
->
sock_path
,
peer
->
cleanup_pos_last
,
written_pos
,
peer
->
local_pos_cleaned
,
clean_pos
);
abort
();
}
// make sure clean pos is between l_p_c and l_p_r
if
(((
peer
->
local_pos_cleaned
<=
peer
->
local_pos_reported
)
&&
(
clean_pos
<
peer
->
local_pos_cleaned
||
clean_pos
>
peer
->
local_pos_reported
))
||
((
peer
->
local_pos_cleaned
>
peer
->
local_pos_reported
)
&&
(
clean_pos
>
peer
->
local_pos_reported
&&
clean_pos
<
peer
->
local_pos_cleaned
)))
{
fprintf
(
stderr
,
"PeerReport: BUG invalid last clean position report: "
"peer %s written %u -> %u, cleaned %u -> %u (lpr=%u)
\n
"
,
peer
->
sock_path
,
peer
->
cleanup_pos_last
,
written_pos
,
peer
->
local_pos_cleaned
,
clean_pos
,
peer
->
local_pos_reported
);
abort
();
}
#ifdef DEBUG
fprintf
(
stderr
,
"PeerReport: peer %s written %u -> %u, cleaned %u -> %u
\n
"
,
peer
->
sock_path
,
peer
->
cleanup_pos_last
,
written_pos
,
...
...
@@ -247,9 +277,8 @@ int NetPeerReport(struct Peer *peer, uint32_t written_pos, uint32_t clean_pos) {
#endif
peer
->
cleanup_pos_last
=
written_pos
;
while
(
peer
->
local_pos_cleaned
!=
clean_pos
)
{
void
*
entry
=
(
peer
->
local_base
+
peer
->
local_pos_cleaned
*
peer
->
local_elen
);
while
(
pos
!=
clean_pos
)
{
void
*
entry
=
(
peer
->
local_base
+
pos
*
peer
->
local_elen
);
if
(
peer
->
is_dev
)
{
struct
SimbricksProtoNetD2NDummy
*
d2n
=
entry
;
d2n
->
own_type
=
SIMBRICKS_PROTO_NET_D2N_OWN_DEV
;
...
...
@@ -258,10 +287,11 @@ int NetPeerReport(struct Peer *peer, uint32_t written_pos, uint32_t clean_pos) {
n2d
->
own_type
=
SIMBRICKS_PROTO_NET_N2D_OWN_NET
;
}
p
eer
->
local_pos_cleaned
+=
1
;
if
(
p
eer
->
local_pos_cleaned
>=
peer
->
local_enum
)
p
eer
->
local_pos_cleaned
-=
peer
->
local_enum
;
p
os
+=
1
;
if
(
p
os
>=
peer
->
local_enum
)
p
os
-=
peer
->
local_enum
;
}
peer
->
local_pos_cleaned
=
pos
;
return
0
;
}
...
...
@@ -458,6 +488,18 @@ void NetPoll() {
void
NetEntryReceived
(
struct
Peer
*
peer
,
uint32_t
pos
,
void
*
data
)
{
// validate position for debugging:
if
((
peer
->
cleanup_pos_reported
<=
peer
->
cleanup_pos_last
&&
(
pos
>=
peer
->
cleanup_pos_reported
&&
pos
<
peer
->
cleanup_pos_last
))
||
(
peer
->
cleanup_pos_reported
>
peer
->
cleanup_pos_last
&&
(
pos
>=
peer
->
cleanup_pos_reported
||
pos
<
peer
->
cleanup_pos_last
)))
{
fprintf
(
stderr
,
"NetEntryReceived: BUG position %u is in window to be "
"cleaned %u -> %u"
,
pos
,
peer
->
cleanup_pos_reported
,
peer
->
cleanup_pos_last
);
abort
();
}
uint64_t
off
=
(
uint64_t
)
pos
*
peer
->
cleanup_elen
;
void
*
entry
=
peer
->
cleanup_base
+
off
;
...
...
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