@@ -623,6 +623,15 @@ MemoryContextAlloc(MemoryContext context, Size size)
623623 context->isReset = false;
624624
625625 ret = (*context->methods->alloc) (context, size);
626+ if (ret == NULL)
627+ {
628+ MemoryContextStats(TopMemoryContext);
629+ ereport(ERROR,
630+ (errcode(ERRCODE_OUT_OF_MEMORY),
631+ errmsg("out of memory"),
632+ errdetail("Failed on request of size %zu.", size)));
633+ }
634+
626635 VALGRIND_MEMPOOL_ALLOC(context, ret, size);
627636
628637 return ret;
@@ -649,6 +658,15 @@ MemoryContextAllocZero(MemoryContext context, Size size)
649658 context->isReset = false;
650659
651660 ret = (*context->methods->alloc) (context, size);
661+ if (ret == NULL)
662+ {
663+ MemoryContextStats(TopMemoryContext);
664+ ereport(ERROR,
665+ (errcode(ERRCODE_OUT_OF_MEMORY),
666+ errmsg("out of memory"),
667+ errdetail("Failed on request of size %zu.", size)));
668+ }
669+
652670 VALGRIND_MEMPOOL_ALLOC(context, ret, size);
653671
654672 MemSetAligned(ret, 0, size);
@@ -677,6 +695,15 @@ MemoryContextAllocZeroAligned(MemoryContext context, Size size)
677695 context->isReset = false;
678696
679697 ret = (*context->methods->alloc) (context, size);
698+ if (ret == NULL)
699+ {
700+ MemoryContextStats(TopMemoryContext);
701+ ereport(ERROR,
702+ (errcode(ERRCODE_OUT_OF_MEMORY),
703+ errmsg("out of memory"),
704+ errdetail("Failed on request of size %zu.", size)));
705+ }
706+
680707 VALGRIND_MEMPOOL_ALLOC(context, ret, size);
681708
682709 MemSetLoop(ret, 0, size);
@@ -699,6 +726,15 @@ palloc(Size size)
699726 CurrentMemoryContext->isReset = false;
700727
701728 ret = (*CurrentMemoryContext->methods->alloc) (CurrentMemoryContext, size);
729+ if (ret == NULL)
730+ {
731+ MemoryContextStats(TopMemoryContext);
732+ ereport(ERROR,
733+ (errcode(ERRCODE_OUT_OF_MEMORY),
734+ errmsg("out of memory"),
735+ errdetail("Failed on request of size %zu.", size)));
736+ }
737+
702738 VALGRIND_MEMPOOL_ALLOC(CurrentMemoryContext, ret, size);
703739
704740 return ret;
@@ -719,6 +755,15 @@ palloc0(Size size)
719755 CurrentMemoryContext->isReset = false;
720756
721757 ret = (*CurrentMemoryContext->methods->alloc) (CurrentMemoryContext, size);
758+ if (ret == NULL)
759+ {
760+ MemoryContextStats(TopMemoryContext);
761+ ereport(ERROR,
762+ (errcode(ERRCODE_OUT_OF_MEMORY),
763+ errmsg("out of memory"),
764+ errdetail("Failed on request of size %zu.", size)));
765+ }
766+
722767 VALGRIND_MEMPOOL_ALLOC(CurrentMemoryContext, ret, size);
723768
724769 MemSetAligned(ret, 0, size);
@@ -789,6 +834,12 @@ repalloc(void *pointer, Size size)
789834 Assert(!context->isReset);
790835
791836 ret = (*context->methods->realloc) (context, pointer, size);
837+ if (ret == NULL)
838+ ereport(ERROR,
839+ (errcode(ERRCODE_OUT_OF_MEMORY),
840+ errmsg("out of memory"),
841+ errdetail("Failed on request of size %zu.", size)));
842+
792843 VALGRIND_MEMPOOL_CHANGE(context, pointer, ret, size);
793844
794845 return ret;
@@ -814,6 +865,15 @@ MemoryContextAllocHuge(MemoryContext context, Size size)
814865 context->isReset = false;
815866
816867 ret = (*context->methods->alloc) (context, size);
868+ if (ret == NULL)
869+ {
870+ MemoryContextStats(TopMemoryContext);
871+ ereport(ERROR,
872+ (errcode(ERRCODE_OUT_OF_MEMORY),
873+ errmsg("out of memory"),
874+ errdetail("Failed on request of size %zu.", size)));
875+ }
876+
817877 VALGRIND_MEMPOOL_ALLOC(context, ret, size);
818878
819879 return ret;
@@ -854,6 +914,12 @@ repalloc_huge(void *pointer, Size size)
854914 Assert(!context->isReset);
855915
856916 ret = (*context->methods->realloc) (context, pointer, size);
917+ if (ret == NULL)
918+ ereport(ERROR,
919+ (errcode(ERRCODE_OUT_OF_MEMORY),
920+ errmsg("out of memory"),
921+ errdetail("Failed on request of size %zu.", size)));
922+
857923 VALGRIND_MEMPOOL_CHANGE(context, pointer, ret, size);
858924
859925 return ret;
0 commit comments