From 88818334b7d6e4c4dfd07cdea09255ac8d42e5b7 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Fri, 16 Dec 2011 08:06:13 -0800 Subject: update to not look at descs[], which is not necessarily valid if the input is a statically allocated type_desc --- src/rt/rust_upcall.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'src/rt/rust_upcall.cpp') diff --git a/src/rt/rust_upcall.cpp b/src/rt/rust_upcall.cpp index 0c015f13d05..97e1321c02d 100644 --- a/src/rt/rust_upcall.cpp +++ b/src/rt/rust_upcall.cpp @@ -224,21 +224,23 @@ void upcall_s_create_shared_type_desc(s_create_shared_type_desc_args *args) // Copy the main part of the type descriptor: const type_desc *td = args->td; - int n_descs = td->n_descs; - size_t sz = sizeof(type_desc) + sizeof(type_desc*) * n_descs; + int n_params = td->n_params; + size_t sz = sizeof(type_desc) + sizeof(type_desc*) * n_params; args->res = (type_desc*) task->kernel->malloc(sz, "create_shared_type_desc"); memcpy(args->res, td, sizeof(type_desc)); // Recursively copy any referenced descriptors: - if (n_descs == 0) { + if (n_params == 0) { args->res->first_param = NULL; } else { args->res->first_param = &args->res->descs[1]; args->res->descs[0] = args->res; - for (int i = 1; i < n_descs; i++) { - s_create_shared_type_desc_args rec_args = { td->descs[i], 0 }; + for (int i = 0; i < n_params; i++) { + s_create_shared_type_desc_args rec_args = { + td->first_param[i], 0 + }; upcall_s_create_shared_type_desc(&rec_args); - args->res->descs[i] = rec_args.res; + args->res->first_param[i] = rec_args.res; } } } @@ -260,8 +262,8 @@ void upcall_s_free_shared_type_desc(type_desc *td) LOG_UPCALL_ENTRY(task); // Recursively free any referenced descriptors: - for (unsigned i = 1; i < td->n_descs; i++) { - upcall_s_free_shared_type_desc((type_desc*) td->descs[i]); + for (unsigned i = 0; i < td->n_params; i++) { + upcall_s_free_shared_type_desc((type_desc*) td->first_param[i]); } task->kernel->free(td); -- cgit 1.4.1-3-g733a5