16
16
* You should have received a copy of the GNU General Public License
17
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
20
* Additional permission under GNU GPL version 3 section 7:
38
38
* This file contains pool default policy definition and implementation.
40
40
#include "pool_signature.h"
43
static void *operator_new(pj_pool_factory *factory, pj_size_t size)
43
static void *operator_new (pj_pool_factory *factory, pj_size_t size)
49
49
if (factory->on_block_alloc) {
51
rc = factory->on_block_alloc(factory, size);
51
rc = factory->on_block_alloc (factory, size);
56
mem = (void*) new char[size+(SIG_SIZE << 1)];
57
mem = (void*) new char[size+ (SIG_SIZE << 1) ];
58
59
/* Exception for new operator may be disabled, so.. */
60
/* Apply signature when PJ_SAFE_POOL is set. It will move
61
* "mem" pointer forward.
61
/* Apply signature when PJ_SAFE_POOL is set. It will move
62
* "mem" pointer forward.
64
APPLY_SIG (mem, size);
69
static void operator_delete(pj_pool_factory *factory, void *mem, pj_size_t size)
70
static void operator_delete (pj_pool_factory *factory, void *mem, pj_size_t size)
73
if (factory->on_block_free)
74
factory->on_block_free(factory, size);
74
if (factory->on_block_free)
75
factory->on_block_free (factory, size);
76
77
/* Check and remove signature when PJ_SAFE_POOL is set. It will
77
78
* move "mem" pointer backward.
79
REMOVE_SIG(mem, size);
80
REMOVE_SIG (mem, size);
81
82
/* Note that when PJ_SAFE_POOL is set, the actual size of the block
82
83
* is size + SIG_SIZE*2.
86
char *p = (char*) mem;
89
static void default_pool_callback(pj_pool_t *pool, pj_size_t size)
90
static void default_pool_callback (pj_pool_t *pool, pj_size_t size)
95
PJ_THROW(PJ_NO_MEMORY_EXCEPTION);
96
PJ_THROW (PJ_NO_MEMORY_EXCEPTION);
98
PJ_DEF_DATA(pj_pool_factory_policy) pj_pool_factory_default_policy =
99
PJ_DEF_DATA (pj_pool_factory_policy) pj_pool_factory_default_policy = {
101
101
&operator_delete,
102
102
&default_pool_callback,
106
PJ_DEF(const pj_pool_factory_policy*) pj_pool_factory_get_default_policy(void)
106
PJ_DEF (const pj_pool_factory_policy*) pj_pool_factory_get_default_policy (void)
108
108
return &pj_pool_factory_default_policy;
112
112
#endif /* PJ_HAS_POOL_ALT_API */