Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
slash
Project
Project
Details
Activity
Releases
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
uplex-varnish
slash
Commits
601e80a4
Unverified
Commit
601e80a4
authored
Jan 16, 2024
by
Nils Goroll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
buddy: additional assertions that wait_pri is correct
parent
6b3b606e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
0 deletions
+35
-0
buddy.c
src/buddy.c
+35
-0
No files found.
src/buddy.c
View file @
601e80a4
...
...
@@ -871,6 +871,29 @@ page_free_locked(struct slashmap *map, unsigned bits, size_t page)
*
*/
#ifdef DEBUG
static
void
assert_waitq
(
buddy_t
*
buddy
)
{
unsigned
pri
;
if
(
buddy
->
waiting
==
0
)
AZ
(
buddy
->
wait_pri
);
for
(
pri
=
BUDDY_WAIT_MAXPRI
;
pri
>
buddy
->
wait_pri
;
pri
--
)
assert
(
VTAILQ_EMPTY
(
&
buddy
->
reqs_head
[
pri
]));
assert
(
pri
==
buddy
->
wait_pri
);
assert
(
VTAILQ_EMPTY
(
&
buddy
->
reqs_head
[
pri
])
==
!
buddy
->
waiting
);
}
#define ASSERT_WAITQ(buddy) assert_waitq(buddy)
#else
#define ASSERT_WAITQ(buddy) (void)0
#endif
static
inline
unsigned
buddy_reqs_work_list_locked
(
struct
buddy_reqs_head
*
head
);
...
...
@@ -881,6 +904,8 @@ buddy_wait_work(buddy_t *buddy)
struct
buddy_reqs_head
*
head
;
unsigned
pri
;
ASSERT_WAITQ
(
buddy
);
AN
(
buddy
->
waiting
);
AN
(
buddy
->
deficit
);
AZ
(
buddy
->
wait_working
);
...
...
@@ -895,6 +920,8 @@ buddy_wait_work(buddy_t *buddy)
buddy
->
wait_pri
=
pri
+
1
;
assert
(
buddy
->
wait_pri
<=
BUDDY_WAIT_MAXPRI
);
buddy
->
wait_working
=
0
;
ASSERT_WAITQ
(
buddy
);
}
// external: wait until space is needed (LRU)
...
...
@@ -1659,6 +1686,8 @@ buddy_reqs_enqueue(struct buddy_reqs *reqs)
CHECK_OBJ
(
w
,
I_WAIT_MAGIC
);
buddy
=
reqs
->
buddy
;
ASSERT_WAITQ
(
buddy
);
assert
(
w
->
state
==
IW_ARMED
);
w
->
state
=
IW_WAITING
;
assert
(
reqs
->
pri
<=
BUDDY_WAIT_MAXPRI
);
...
...
@@ -1669,6 +1698,7 @@ buddy_reqs_enqueue(struct buddy_reqs *reqs)
if
(
w
->
pri
>
buddy
->
wait_pri
)
buddy
->
wait_pri
=
w
->
pri
;
AZ
(
pthread_cond_broadcast
(
&
buddy
->
wait_kick_cond
));
ASSERT_WAITQ
(
buddy
);
}
/*
...
...
@@ -1727,6 +1757,8 @@ buddy_reqs_wait_cancel(struct buddy_reqs *reqs)
AZ
(
pthread_mutex_lock
(
&
reqs
->
buddy
->
map_mtx
));
AZ
(
pthread_mutex_lock
(
&
w
->
wait_mtx
));
ASSERT_WAITQ
(
buddy
);
if
(
w
->
state
==
IW_WAITING
)
{
AN
(
buddy
->
waiting
);
buddy
->
waiting
--
;
...
...
@@ -1738,6 +1770,9 @@ buddy_reqs_wait_cancel(struct buddy_reqs *reqs)
}
if
(
buddy
->
waiting
&&
buddy
->
wait_pri
==
w
->
pri
)
buddy_wait_work
(
buddy
);
ASSERT_WAITQ
(
buddy
);
AZ
(
pthread_mutex_unlock
(
&
reqs
->
buddy
->
map_mtx
));
}
else
{
AZ
(
pthread_mutex_lock
(
&
w
->
wait_mtx
));
...
...
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