mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
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:
1 parent
4456c54026
commit
52be445541
1 file changed
+21
-4
@@ -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));
|
||||
}
|
||||
|
||||
|
||||