File: test-mempool.c

package info (click to toggle)
pipewire 1.4.9-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 16,892 kB
  • sloc: ansic: 296,152; cpp: 2,815; xml: 407; python: 234; sh: 211; makefile: 168; pascal: 85
file content (49 lines) | stat: -rw-r--r-- 1,257 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* PipeWire */
/* SPDX-FileCopyrightText: Copyright © 2025 PipeWire authors */
/* SPDX-License-Identifier: MIT */

#include <unistd.h>

#include <pipewire/mem.h>
#include <spa/buffer/buffer.h>

#include "pwtest.h"

PWTEST(mempool_issue4884)
{
	/*
	 * See https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/4884. This
	 * test checks if the offset is correctly applied when a mapping is reused.
	 */

	long page_size = sysconf(_SC_PAGESIZE);
	pwtest_errno_ok(page_size);
	pwtest_int_ge(page_size, 8);

	struct pw_mempool *p = pw_mempool_new(NULL);
	pwtest_ptr_notnull(p);

	struct pw_memblock *b = pw_mempool_alloc(p, PW_MEMBLOCK_FLAG_READWRITE, SPA_DATA_MemFd, 2 * page_size);
	pwtest_ptr_notnull(b);

	struct pw_memmap *m1 = pw_mempool_map_id(p, b->id, PW_MEMMAP_FLAG_READWRITE, page_size / 2, page_size, NULL);
	pwtest_ptr_notnull(m1);
	pwtest_ptr_eq(m1->block, b);

	struct pw_memmap *m2 = pw_mempool_map_id(p, b->id, PW_MEMMAP_FLAG_READWRITE, 3 * page_size / 2, page_size / 2, NULL);
	pwtest_ptr_notnull(m2);
	pwtest_ptr_eq(m2->block, b);

	pwtest_int_eq(SPA_PTRDIFF(m2->ptr, m1->ptr), page_size);

	pw_mempool_destroy(p);

	return PWTEST_PASS;
}

PWTEST_SUITE(pw_mempool)
{
	pwtest_add(mempool_issue4884, PWTEST_NOARG);

	return PWTEST_PASS;
}