]> git.0d.be Git - jack_mixer.git/blob - memory_atomic.h
Add a trayicon and minimize to tray feature (#2992)
[jack_mixer.git] / memory_atomic.h
1 /* -*- Mode: C ; c-basic-offset: 2 -*- */
2 /*****************************************************************************
3  *
4  *   Non-sleeping memory allocation
5  *
6  *   Copyright (C) 2006,2007 Nedko Arnaudov <nedko@arnaudov.name>
7  *
8  *   This program is free software; you can redistribute it and/or modify
9  *   it under the terms of the GNU General Public License as published by
10  *   the Free Software Foundation; version 2 of the License
11  *
12  *   This program is distributed in the hope that it will be useful,
13  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *   GNU General Public License for more details.
16  *
17  *   You should have received a copy of the GNU General Public License
18  *   along with this program; if not, write to the Free Software
19  *   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  *****************************************************************************/
22
23 #ifndef MEMORY_ATOMIC_H__7B572547_304D_4597_8808_990BE4476CC3__INCLUDED
24 #define MEMORY_ATOMIC_H__7B572547_304D_4597_8808_990BE4476CC3__INCLUDED
25
26 typedef void * rtsafe_memory_pool_handle;
27
28 /* will sleep */
29 bool
30 rtsafe_memory_pool_create(
31   size_t data_size,             /* chunk size */
32   size_t min_preallocated,      /* min chunks preallocated */
33   size_t max_preallocated,      /* max chunks preallocated */
34   bool enforce_thread_safety,   /* true - enforce thread safety (internal mutex),
35                                    false - assume caller code is already thread-safe */
36   rtsafe_memory_pool_handle * pool_ptr);
37
38 /* will sleep */
39 void
40 rtsafe_memory_pool_destroy(
41   rtsafe_memory_pool_handle pool);
42
43 /* may sleep */
44 void
45 rtsafe_memory_pool_sleepy(
46   rtsafe_memory_pool_handle pool);
47
48 /* will not sleep, returns NULL if no memory is available */
49 void *
50 rtsafe_memory_pool_allocate(
51   rtsafe_memory_pool_handle pool);
52
53 /* may sleep, will not fail */
54 void *
55 rtsafe_memory_pool_allocate_sleepy(
56   rtsafe_memory_pool_handle pool);
57
58 /* will not sleep */
59 void
60 rtsafe_memory_pool_deallocate(
61   rtsafe_memory_pool_handle pool,
62   void * data);
63
64 typedef void * rtsafe_memory_handle;
65
66 /* will sleep */
67 bool
68 rtsafe_memory_init(
69   size_t max_size,
70   size_t prealloc_min,
71   size_t prealloc_max,
72   bool enforce_thread_safety,   /* true - enforce thread safety (internal mutex),
73                                    false - assume caller code is already thread-safe */
74   rtsafe_memory_handle * handle_ptr);
75
76 /* will not sleep, returns NULL if no memory is available */
77 void *
78 rtsafe_memory_allocate(
79   rtsafe_memory_handle handle_ptr,
80   size_t size);
81
82 /* may sleep */
83 void
84 rtsafe_memory_sleepy(
85   rtsafe_memory_handle handle_ptr);
86
87 /* will not sleep */
88 void
89 rtsafe_memory_deallocate(
90   void * data);
91
92 void
93 rtsafe_memory_uninit(
94   rtsafe_memory_handle handle_ptr);
95
96 #endif /* #ifndef MEMORY_ATOMIC_H__7B572547_304D_4597_8808_990BE4476CC3__INCLUDED */