mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
If spi.c wants to use malloc, it better test for malloc failure.
This commit is contained in:
parent
7748e9e7e5
commit
25ee08e14a
@ -3,7 +3,7 @@
|
|||||||
* spi.c
|
* spi.c
|
||||||
* Server Programming Interface
|
* Server Programming Interface
|
||||||
*
|
*
|
||||||
* $Id: spi.c,v 1.54 2001/05/21 14:22:17 wieck Exp $
|
* $Header: /cvsroot/pgsql/src/backend/executor/spi.c,v 1.55 2001/06/01 19:43:55 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -48,8 +48,9 @@ extern void ShowUsage(void);
|
|||||||
/* =================== interface functions =================== */
|
/* =================== interface functions =================== */
|
||||||
|
|
||||||
int
|
int
|
||||||
SPI_connect()
|
SPI_connect(void)
|
||||||
{
|
{
|
||||||
|
_SPI_connection *new_SPI_stack;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When procedure called by Executor _SPI_curid expected to be equal
|
* When procedure called by Executor _SPI_curid expected to be equal
|
||||||
@ -62,19 +63,23 @@ SPI_connect()
|
|||||||
{
|
{
|
||||||
if (_SPI_connected != -1)
|
if (_SPI_connected != -1)
|
||||||
elog(FATAL, "SPI_connect: no connection(s) expected");
|
elog(FATAL, "SPI_connect: no connection(s) expected");
|
||||||
_SPI_stack = (_SPI_connection *) malloc(sizeof(_SPI_connection));
|
new_SPI_stack = (_SPI_connection *) malloc(sizeof(_SPI_connection));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (_SPI_connected <= -1)
|
if (_SPI_connected <= -1)
|
||||||
elog(FATAL, "SPI_connect: some connection(s) expected");
|
elog(FATAL, "SPI_connect: some connection(s) expected");
|
||||||
_SPI_stack = (_SPI_connection *) realloc(_SPI_stack,
|
new_SPI_stack = (_SPI_connection *) realloc(_SPI_stack,
|
||||||
(_SPI_connected + 2) * sizeof(_SPI_connection));
|
(_SPI_connected + 2) * sizeof(_SPI_connection));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (new_SPI_stack == NULL)
|
||||||
|
elog(ERROR, "Memory exhausted in SPI_connect");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We' returning to procedure where _SPI_curid == _SPI_connected - 1
|
* We' returning to procedure where _SPI_curid == _SPI_connected - 1
|
||||||
*/
|
*/
|
||||||
|
_SPI_stack = new_SPI_stack;
|
||||||
_SPI_connected++;
|
_SPI_connected++;
|
||||||
|
|
||||||
_SPI_current = &(_SPI_stack[_SPI_connected]);
|
_SPI_current = &(_SPI_stack[_SPI_connected]);
|
||||||
@ -104,7 +109,7 @@ SPI_connect()
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
SPI_finish()
|
SPI_finish(void)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
@ -136,8 +141,14 @@ SPI_finish()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_SPI_stack = (_SPI_connection *) realloc(_SPI_stack,
|
_SPI_connection *new_SPI_stack;
|
||||||
|
|
||||||
|
new_SPI_stack = (_SPI_connection *) realloc(_SPI_stack,
|
||||||
(_SPI_connected + 1) * sizeof(_SPI_connection));
|
(_SPI_connected + 1) * sizeof(_SPI_connection));
|
||||||
|
/* This could only fail with a pretty stupid malloc package ... */
|
||||||
|
if (new_SPI_stack == NULL)
|
||||||
|
elog(ERROR, "Memory exhausted in SPI_finish");
|
||||||
|
_SPI_stack = new_SPI_stack;
|
||||||
_SPI_current = &(_SPI_stack[_SPI_connected]);
|
_SPI_current = &(_SPI_stack[_SPI_connected]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,7 +162,6 @@ SPI_finish()
|
|||||||
void
|
void
|
||||||
AtEOXact_SPI(void)
|
AtEOXact_SPI(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note that memory contexts belonging to SPI stack entries will be
|
* Note that memory contexts belonging to SPI stack entries will be
|
||||||
* freed automatically, so we can ignore them here. We just need to
|
* freed automatically, so we can ignore them here. We just need to
|
||||||
|
Loading…
x
Reference in New Issue
Block a user