cru_free_later - non-blocking graph reclamation function
#include <cru/cru.h>
void cru_free_later ( cru_graph g , int *err )
This function reclaims all memory allocated for storage of a graph and does so in a single background thread so that it can return immediately without blocking the caller. The parameter g refers to the graph to be reclaimed, and is expected to have been returned by some library function that returns a cru_graph.
For purposes of memory management, the graph g is consumed by this function and must not be accessed afterwards.
none
To avoid a memory leak, this function must be called for each graph before it goes out of scope. Memory leaks are an error but are not detected or reported.
Any attempted use of the graph g subsequent to passing it to this function is an error with unpredictable consequences.
The err parameter is used to report any events preventing successful completion of the requested operation to the caller. If *err is zero on entry and the operation does not succeed, then *err is assigned a non-zero number. Positive numbers are for POSIX or user-defined error codes, and negative numbers down to -CRU_MAX_ERR are specific to cru.
Values of *err listed below refer to errors that are detected and handled. Unlisted values in the range of -CRU_INT_ERR through -CRU_MAX_ERR likely indicate internal errors attributable to bugs in cru. Any other unlisted values may indicate memory corruption or invalid usage of the API.
ENOMEM
There is insufficient memory to start a thread, so the graph was freed sequentially in the foreground.
CRU_BADGPH
The parameter g refers to a corrupted or invalid cru_graph.
This way of freeing a graph is appropriate if the application performs further operations after using the graph that are insufficiently memory intensive to warrant freeing it in advance, and are sufficiently time consuming in themselves to ensure adequate time for the reclamation to complete single-threaded in the background without blocking the job's termination. The alternative of cru_free_now is more appropriate otherwise.
/usr/local/include/cru/cru.h
/usr/local/include/cru/data_types.h
/usr/local/include/cru/error_codes.h
cru, cru_bop, cru_bpred, cru_builder, cru_built, cru_cbop, cru_classifier, cru_class_of, cru_class_size, cru_composed, cru_composer, cru_connect, cru_connector, cru_cqop, cru_crossed, cru_crosser, cru_ctop, cru_ctop_pair, cru_ctop_quad, cru_data_types, cru_deduplicated, cru_destructor, cru_destructor_pair, cru_edge_count, cru_fabricated, cru_fabricator, cru_filter, cru_filtered, cru_fold, cru_free_kill_switch, cru_free_now, cru_free_partition, cru_function_types, cru_get, cru_hash, cru_induced, cru_inducer, cru_kernel, cru_kill, cru_killed, cru_mapreduced, cru_mapreducer, cru_merged, cru_merger, cru_mutated, cru_mutator, cru_new_kill_switch, cru_nop, cru_order, cru_order_pair, cru_partition_of, cru_plan, cru_postponed, cru_postponer, cru_prop, cru_prop_pair, cru_pruner, cru_qop, cru_qpred, cru_set, cru_sig, cru_singleton, cru_split, cru_splitter, cru_spread, cru_strerror, cru_stretch, cru_stretched, cru_stretcher, cru_subconnector, cru_terminus_count, cru_top, cru_tpred, cru_united, cru_uop, cru_vertex_count, cru_zone
Dennis Furey (milonga@delayinsensitive.com)
https://github.com/gueststar/cru