@@ -251,7 +251,7 @@ caml_ba_alloc(int flags, int num_dims, void * data, intnat * dim)
251
251
uses_resources =
252
252
((flags & CAML_BA_MANAGED_MASK ) == CAML_BA_MANAGED )
253
253
&& !(flags & CAML_BA_SUBARRAY );
254
- res = caml_alloc_custom_mem (& caml_ba_ops , asize , uses_resources ? size : 0 );
254
+ res = caml_alloc_custom_dep (& caml_ba_ops , asize , uses_resources ? size : 0 );
255
255
b = Caml_ba_array_val (res );
256
256
b -> data = data ;
257
257
b -> num_dims = num_dims ;
@@ -291,9 +291,11 @@ CAMLexport void caml_ba_finalize(value v)
291
291
case CAML_BA_MANAGED :
292
292
if (b -> proxy == NULL ) {
293
293
free (b -> data );
294
+ caml_free_dependent_memory (v , caml_ba_byte_size (b ));
294
295
} else {
295
296
if (caml_atomic_refcount_decr (& b -> proxy -> refcount ) == 1 ) {
296
297
free (b -> proxy -> data );
298
+ caml_free_dependent_memory (v , b -> proxy -> size );
297
299
free (b -> proxy );
298
300
}
299
301
}
@@ -620,6 +622,7 @@ CAMLexport uintnat caml_ba_deserialize(void * dst)
620
622
caml_deserialize_error ("input_value: size overflow for bigarray" );
621
623
/* Allocate room for data */
622
624
b -> data = malloc (size );
625
+ caml_alloc_dependent_memory (Custom_val_data (dst ), size );
623
626
if (b -> data == NULL )
624
627
caml_deserialize_error ("input_value: out of memory for bigarray" );
625
628
/* Read data */
@@ -1138,8 +1141,7 @@ static void caml_ba_update_proxy(struct caml_ba_array * b1,
1138
1141
caml_atomic_refcount_init (& proxy -> refcount , 2 );
1139
1142
/* initial refcount: 2 = original array + sub array */
1140
1143
proxy -> data = b1 -> data ;
1141
- proxy -> size =
1142
- b1 -> flags & CAML_BA_MAPPED_FILE ? caml_ba_byte_size (b1 ) : 0 ;
1144
+ proxy -> size = caml_ba_byte_size (b1 );
1143
1145
b1 -> proxy = proxy ;
1144
1146
b2 -> proxy = proxy ;
1145
1147
}
0 commit comments