mirror of
https://git.proxmox.com/git/mirror_corosync
synced 2025-05-25 21:25:26 +00:00
Changeset 1.22 introduced problem with managing messages
in the sort queue. The result was memory leakage. (Logical change 1.31) git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@97 fd59a12c-fef9-0310-b244-a6a79926bd2f
This commit is contained in:
parent
7a6f27be80
commit
dd7f1e67d3
22
include/sq.h
22
include/sq.h
@ -150,35 +150,23 @@ assert (sq_position >= 0);
|
||||
static inline void sq_items_release (struct sq *sq, int seqid)
|
||||
{
|
||||
int oldhead;
|
||||
char *sq_item;
|
||||
|
||||
if (seqid < sq->head_seqid) {
|
||||
//printf ("%d %d\n", seqid, sq->head_seqid);
|
||||
return;
|
||||
}
|
||||
//printf ("releasing %d\n", seqid);
|
||||
|
||||
oldhead = sq->head;
|
||||
|
||||
//printf ("before sq->head %d\n", sq->head);
|
||||
sq->head = (sq->head + seqid - sq->head_seqid + 1) % sq->size;
|
||||
//printf ("after sq->head %d\n", sq->head);
|
||||
if ((oldhead + seqid - sq->head_seqid + 1) > sq->size) {
|
||||
//printf ("memset 1\n");
|
||||
//printf ("%d %d %d %d\n", seqid, sq->head_seqid, sq->head, sq->size);
|
||||
assert ((sq->size - oldhead) > 0);
|
||||
//printf ("releasing %d for %d\n", oldhead, sq->size - oldhead);
|
||||
//printf ("releasing %d for %d\n", 0, sq->head);
|
||||
memset (&sq->items_inuse[oldhead], 0, sq->size - oldhead);
|
||||
memset (sq->items_inuse, 0, sq->head * sizeof (char));
|
||||
//printf ("SIZEOF %d %d\n", sq->head, sq->head * sizeof (char));
|
||||
// memset (sq->items, 0, (sq->head) * (sq->size_per_item));
|
||||
} else {
|
||||
assert (seqid - sq->head_seqid + 1);
|
||||
//printf ("memset 2\n");
|
||||
//printf ("releasing %d for %d\n", oldhead, seqid - sq->head_seqid + 1);
|
||||
memset (&sq->items_inuse[oldhead], 0, (seqid - sq->head_seqid + 2) * sizeof (char));
|
||||
sq_item = sq->items;
|
||||
sq_item += oldhead * sq->size_per_item;
|
||||
// memset (sq_item[oldhead], 0, (seqid - sq->head_seqid + 1) * (sq->size_per_item));
|
||||
//printf ("releasing %d for %d\n", oldhead, seqid - sq->head_seqid + 1);
|
||||
memset (&sq->items_inuse[oldhead], 0,
|
||||
(seqid - sq->head_seqid + 1) * sizeof (char));
|
||||
}
|
||||
sq->head_seqid = seqid + 1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user