use new gc functions to deep copy structure and only free once the gc

Signed-off-by: Vincent Hanquez <vincent.hanquez@eu.citrix.com>
This commit is contained in:
Stefano Stabellini committed 2010-08-10 15:31:55 +01:00
1 parent 4456c54026
commit 52be445541
1 file changed
+21 -4
+21 -4
View File
@@ -63,18 +63,38 @@ void log_destroy(struct xentoollog_logger *logger)
failwith_xl("cannot init context", &lg);
#define FREE_CTX() \
gc_free(&gc); \
libxl_ctx_free(&ctx)
static void * gc_calloc(caml_gc *gc, size_t nmemb, size_t size)
{
void *ptr;
ptr = calloc(nmemb, size);
if (!ptr)
caml_raise_out_of_memory();
gc->ptrs[gc->offset++] = ptr;
return ptr;
}
static char * dup_String_val(caml_gc *gc, value s)
{
return String_val(s);
int len;
char *c;
len = caml_string_length(s);
c = calloc(len + 1, sizeof(char));
if (!c)
caml_raise_out_of_memory();
gc->ptrs[gc->offset++] = c;
memcpy(c, String_val(s), len);
return c;
}
static void gc_free(caml_gc *gc)
{
int i;
for (i = 0; i < gc->offset; i++) {
free(gc->ptrs[i]);
}
}
void failwith_xl(char *fname, struct caml_logger *lg)
@@ -349,9 +369,6 @@ value stub_xl_domain_make(value info)
FREE_CTX();
free(c_info.xsdata);
free(c_info.platformdata);
CAMLreturn(Val_int(domid));
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.