File: GB_mx_at_exit.c

package info (click to toggle)
suitesparse 1%3A7.10.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 254,920 kB
  • sloc: ansic: 1,134,743; cpp: 46,133; makefile: 4,875; fortran: 2,087; java: 1,826; sh: 996; ruby: 725; python: 495; asm: 371; sed: 166; awk: 44
file content (35 lines) | stat: -rw-r--r-- 1,440 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//------------------------------------------------------------------------------
// GB_mx_at_exit: terminate GraphBLAS
//------------------------------------------------------------------------------

// SuiteSparse:GraphBLAS, Timothy A. Davis, (c) 2017-2025, All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

//------------------------------------------------------------------------------

// This method is called by MATLAB when the mexFunction that called GrB_init
// (or GxB_init) is cleared.

#include "GB_mex.h"

void GB_mx_at_exit ( void )
{
    // Finalize GraphBLAS, clearing all JIT kernels and freeing the hash table.
    // MATLAB can only use GraphBLAS if GrB_init / GxB_init is called again.

    GB_Global_persistent_set (mexMakeMemoryPersistent) ;

    // The call to GB_Global_GrB_init_called_set allows GrB_init or GxB_init to
    // be called again.  This is an extension to the spec that is possible with
    // SuiteSparse:GraphBLAS but not available via a documented function.
    // Instead, an internal method is used.  If this flag is set, the next call
    // to any @GrB mexFunction will first call gb_usage, which calls GxB_init
    // to re-initialize GraphBLAS.  That method will re-load the hash table
    // with all PreJIT kernels.

    // These 2 lines are placed together so a "grep GrB_finalize" reports
    // both of them.

    GrB_finalize ( ) ; GB_Global_GrB_init_called_set (false) ;
}