2008-09-21 23:08:41 +02:00
|
|
|
|
|
|
|
#include <stdio.h>
|
2008-10-16 17:41:45 +02:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <unistd.h>
|
2008-09-21 23:08:41 +02:00
|
|
|
#include <glib.h>
|
|
|
|
|
2008-11-01 16:01:05 +01:00
|
|
|
#include "../src/mem_pool.h"
|
|
|
|
#include "tests.h"
|
|
|
|
|
2008-09-21 23:08:41 +02:00
|
|
|
#define TEST_BUF "test bufffer"
|
|
|
|
#define TEST2_BUF "test bufffertest bufffer"
|
|
|
|
|
|
|
|
void
|
|
|
|
rspamd_mem_pool_test_func ()
|
|
|
|
{
|
|
|
|
memory_pool_t *pool;
|
2008-09-23 09:47:56 +02:00
|
|
|
memory_pool_stat_t st;
|
2008-10-16 17:41:45 +02:00
|
|
|
char *tmp, *tmp2, *tmp3;
|
|
|
|
pid_t pid;
|
|
|
|
int ret;
|
2008-09-21 23:08:41 +02:00
|
|
|
|
|
|
|
pool = memory_pool_new (sizeof (TEST_BUF));
|
|
|
|
tmp = memory_pool_alloc (pool, sizeof (TEST_BUF));
|
|
|
|
tmp2 = memory_pool_alloc (pool, sizeof (TEST_BUF) * 2);
|
2008-10-16 17:41:45 +02:00
|
|
|
tmp3 = memory_pool_alloc_shared (pool, sizeof (TEST_BUF));
|
2008-09-21 23:08:41 +02:00
|
|
|
|
|
|
|
snprintf (tmp, sizeof (TEST_BUF), "%s", TEST_BUF);
|
|
|
|
snprintf (tmp2, sizeof (TEST_BUF) * 2, "%s", TEST2_BUF);
|
2008-10-16 17:41:45 +02:00
|
|
|
snprintf (tmp3, sizeof (TEST_BUF), "%s", TEST_BUF);
|
2008-09-21 23:08:41 +02:00
|
|
|
|
|
|
|
g_assert (strncmp (tmp, TEST_BUF, sizeof (TEST_BUF)) == 0);
|
|
|
|
g_assert (strncmp (tmp2, TEST2_BUF, sizeof (TEST2_BUF)) == 0);
|
2008-10-16 17:41:45 +02:00
|
|
|
g_assert (strncmp (tmp3, TEST_BUF, sizeof (TEST_BUF)) == 0);
|
|
|
|
memory_pool_lock_shared (pool, tmp3);
|
|
|
|
if ((pid = fork ()) == 0) {
|
|
|
|
memory_pool_lock_shared (pool, tmp3);
|
|
|
|
g_assert (*tmp3 == 's');
|
|
|
|
*tmp3 = 't';
|
|
|
|
memory_pool_unlock_shared (pool, tmp3);
|
|
|
|
exit (EXIT_SUCCESS);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
*tmp3 = 's';
|
|
|
|
memory_pool_unlock_shared (pool, tmp3);
|
|
|
|
}
|
|
|
|
wait (&ret);
|
|
|
|
g_assert (*tmp3 == 't');
|
2008-09-21 23:08:41 +02:00
|
|
|
|
|
|
|
memory_pool_delete (pool);
|
2008-09-23 09:47:56 +02:00
|
|
|
memory_pool_stat (&st);
|
|
|
|
|
|
|
|
/* Check allocator stat */
|
2008-10-16 17:41:45 +02:00
|
|
|
g_assert (st.bytes_allocated == sizeof (TEST_BUF) * 4);
|
2008-09-23 09:47:56 +02:00
|
|
|
g_assert (st.chunks_allocated == 2);
|
2008-10-16 17:41:45 +02:00
|
|
|
g_assert (st.shared_chunks_allocated == 1);
|
|
|
|
g_assert (st.chunks_freed == 3);
|
2008-09-21 23:08:41 +02:00
|
|
|
}
|