Hi all, As of the work done in 87ae9691, I have played with error injections in the code paths using this code, but forgot to count for cases where cascading resowner cleanups are involved. Like other resources (JIT, DSM, etc.), this requires an allocation in TopMemoryContext to make sure that nothing gets forgotten or cleaned up on the way until the resowner that did the cryptohash allocation is handled.
Attached is a small extension I have played with by doing some error injections, and a patch. If there are no objections, I would like to commit this fix. Thanks, -- Michael
diff --git a/src/common/cryptohash_openssl.c b/src/common/cryptohash_openssl.c index 118651c415..fa06d70e72 100644 --- a/src/common/cryptohash_openssl.c +++ b/src/common/cryptohash_openssl.c @@ -31,11 +31,12 @@ #endif /* - * In backend, use palloc/pfree to ease the error handling. In frontend, - * use malloc to be able to return a failure status back to the caller. + * In backend, use an allocation in TopMemoryContext to count for resowner + * cleanup handling. In frontend, use malloc to be able to return a failure + * status back to the caller. */ #ifndef FRONTEND -#define ALLOC(size) palloc(size) +#define ALLOC(size) MemoryContextAlloc(TopMemoryContext, size) #define FREE(ptr) pfree(ptr) #else #define ALLOC(size) malloc(size)
hashfuncs.tar.gz
Description: application/gzip
signature.asc
Description: PGP signature