@@ -287,6 +287,10 @@ class DPNPC_id final
287287 {
288288 if (!__axes.empty () && input_shape_size)
289289 {
290+ free_axes_memory ();
291+ free_iteration_memory ();
292+ free_output_memory ();
293+
290294 axes = get_validated_axes (__axes, input_shape_size);
291295 axis_use = true ;
292296
@@ -436,15 +440,49 @@ class DPNPC_id final
436440 return iteration_size;
437441 }
438442
439- void free_memory ()
443+ void free_axes_memory ()
444+ {
445+ axes.clear ();
446+ dpnp_memory_free_c (axes_shape_strides);
447+ axes_shape_strides = nullptr ;
448+ }
449+
450+ void free_input_memory ()
440451 {
452+ input_size = size_type{};
453+ input_shape_size = size_type{};
441454 dpnp_memory_free_c (input_shape);
442455 dpnp_memory_free_c (input_shape_strides);
456+ input_shape = nullptr ;
457+ input_shape_strides = nullptr ;
458+ }
459+
460+ void free_iteration_memory ()
461+ {
462+ iteration_size = size_type{};
463+ iteration_shape_size = size_type{};
464+ dpnp_memory_free_c (iteration_shape_strides);
465+ iteration_shape_strides = nullptr ;
466+ }
467+
468+ void free_output_memory ()
469+ {
470+ output_size = size_type{};
471+ output_shape_size = size_type{};
443472 dpnp_memory_free_c (output_shape);
444473 dpnp_memory_free_c (output_shape_strides);
445- dpnp_memory_free_c (iteration_shape_strides);
446- dpnp_memory_free_c (axes_shape_strides);
447474 dpnp_memory_free_c (sycl_output_xyz);
475+ output_shape = nullptr ;
476+ output_shape_strides = nullptr ;
477+ sycl_output_xyz = nullptr ;
478+ }
479+
480+ void free_memory ()
481+ {
482+ free_axes_memory ();
483+ free_input_memory ();
484+ free_iteration_memory ();
485+ free_output_memory ();
448486 }
449487
450488 pointer data = nullptr ; /* *< input array begin pointer */
0 commit comments