PostgreSQL Source Code  git master
fe_memutils.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define MCXT_ALLOC_HUGE
 
#define MCXT_ALLOC_NO_OOM   0x02 /* no failure if out-of-memory */
 
#define MCXT_ALLOC_ZERO   0x04 /* zero allocated memory */
 
#define pg_malloc_object(type)   ((type *) pg_malloc(sizeof(type)))
 
#define pg_malloc0_object(type)   ((type *) pg_malloc0(sizeof(type)))
 
#define pg_malloc_array(type, count)   ((type *) pg_malloc(sizeof(type) * (count)))
 
#define pg_malloc0_array(type, count)   ((type *) pg_malloc0(sizeof(type) * (count)))
 
#define pg_realloc_array(pointer, type, count)   ((type *) pg_realloc(pointer, sizeof(type) * (count)))
 
#define palloc_object(type)   ((type *) palloc(sizeof(type)))
 
#define palloc0_object(type)   ((type *) palloc0(sizeof(type)))
 
#define palloc_array(type, count)   ((type *) palloc(sizeof(type) * (count)))
 
#define palloc0_array(type, count)   ((type *) palloc0(sizeof(type) * (count)))
 
#define repalloc_array(pointer, type, count)   ((type *) repalloc(pointer, sizeof(type) * (count)))
 

Functions

char * pg_strdup (const char *in)
 
void * pg_malloc (size_t size)
 
void * pg_malloc0 (size_t size)
 
void * pg_malloc_extended (size_t size, int flags)
 
void * pg_realloc (void *ptr, size_t size)
 
void pg_free (void *ptr)
 
char * pstrdup (const char *in)
 
char * pnstrdup (const char *in, Size size)
 
void * palloc (Size size)
 
void * palloc0 (Size size)
 
void * palloc_extended (Size size, int flags)
 
void * repalloc (void *pointer, Size size)
 
void pfree (void *pointer)
 
char * psprintf (const char *fmt,...) pg_attribute_printf(1
 
char size_t pvsnprintf (char *buf, size_t len, const char *fmt, va_list args) pg_attribute_printf(3
 

Macro Definition Documentation

◆ MCXT_ALLOC_HUGE

#define MCXT_ALLOC_HUGE
Value:
0x01 /* allow huge allocation (> 1 GB) not
* actually used for frontends */

Definition at line 16 of file fe_memutils.h.

◆ MCXT_ALLOC_NO_OOM

#define MCXT_ALLOC_NO_OOM   0x02 /* no failure if out-of-memory */

Definition at line 17 of file fe_memutils.h.

◆ MCXT_ALLOC_ZERO

#define MCXT_ALLOC_ZERO   0x04 /* zero allocated memory */

Definition at line 18 of file fe_memutils.h.

◆ palloc0_array

#define palloc0_array (   type,
  count 
)    ((type *) palloc0(sizeof(type) * (count)))

Definition at line 65 of file fe_memutils.h.

◆ palloc0_object

#define palloc0_object (   type)    ((type *) palloc0(sizeof(type)))

Definition at line 63 of file fe_memutils.h.

◆ palloc_array

#define palloc_array (   type,
  count 
)    ((type *) palloc(sizeof(type) * (count)))

Definition at line 64 of file fe_memutils.h.

◆ palloc_object

#define palloc_object (   type)    ((type *) palloc(sizeof(type)))

Definition at line 62 of file fe_memutils.h.

◆ pg_malloc0_array

#define pg_malloc0_array (   type,
  count 
)    ((type *) pg_malloc0(sizeof(type) * (count)))

Definition at line 45 of file fe_memutils.h.

◆ pg_malloc0_object

#define pg_malloc0_object (   type)    ((type *) pg_malloc0(sizeof(type)))

Definition at line 39 of file fe_memutils.h.

◆ pg_malloc_array

#define pg_malloc_array (   type,
  count 
)    ((type *) pg_malloc(sizeof(type) * (count)))

Definition at line 44 of file fe_memutils.h.

◆ pg_malloc_object

#define pg_malloc_object (   type)    ((type *) pg_malloc(sizeof(type)))

Definition at line 38 of file fe_memutils.h.

◆ pg_realloc_array

#define pg_realloc_array (   pointer,
  type,
  count 
)    ((type *) pg_realloc(pointer, sizeof(type) * (count)))

Definition at line 51 of file fe_memutils.h.

◆ repalloc_array

#define repalloc_array (   pointer,
  type,
  count 
)    ((type *) repalloc(pointer, sizeof(type) * (count)))

Definition at line 66 of file fe_memutils.h.

Function Documentation

◆ palloc()

void* palloc ( Size  size)

Definition at line 1210 of file mcxt.c.

1211 {
1212  /* duplicates MemoryContextAlloc to avoid increased overhead */
1213  void *ret;
1215 
1216  Assert(MemoryContextIsValid(context));
1217  AssertNotInCriticalSection(context);
1218 
1219  if (!AllocSizeIsValid(size))
1220  elog(ERROR, "invalid memory alloc request size %zu", size);
1221 
1222  context->isReset = false;
1223 
1224  ret = context->methods->alloc(context, size);
1225  if (unlikely(ret == NULL))
1226  {
1228  ereport(ERROR,
1229  (errcode(ERRCODE_OUT_OF_MEMORY),
1230  errmsg("out of memory"),
1231  errdetail("Failed on request of size %zu in memory context \"%s\".",
1232  size, context->name)));
1233  }
1234 
1235  VALGRIND_MEMPOOL_ALLOC(context, ret, size);
1236 
1237  return ret;
1238 }
#define unlikely(x)
Definition: c.h:295
int errdetail(const char *fmt,...)
Definition: elog.c:1202
int errcode(int sqlerrcode)
Definition: elog.c:858
int errmsg(const char *fmt,...)
Definition: elog.c:1069
#define ERROR
Definition: elog.h:39
#define ereport(elevel,...)
Definition: elog.h:149
Assert(fmt[strlen(fmt) - 1] !='\n')
MemoryContext TopMemoryContext
Definition: mcxt.c:141
#define AssertNotInCriticalSection(context)
Definition: mcxt.c:166
MemoryContext CurrentMemoryContext
Definition: mcxt.c:135
void MemoryContextStats(MemoryContext context)
Definition: mcxt.c:683
#define VALGRIND_MEMPOOL_ALLOC(context, addr, size)
Definition: memdebug.h:29
#define MemoryContextIsValid(context)
Definition: memnodes.h:107
#define AllocSizeIsValid(size)
Definition: memutils.h:42
const MemoryContextMethods * methods
Definition: memnodes.h:88
const char * name
Definition: memnodes.h:93
void *(* alloc)(MemoryContext context, Size size)
Definition: memnodes.h:60

◆ palloc0()

void* palloc0 ( Size  size)

Definition at line 1241 of file mcxt.c.

1242 {
1243  /* duplicates MemoryContextAllocZero to avoid increased overhead */
1244  void *ret;
1246 
1247  Assert(MemoryContextIsValid(context));
1248  AssertNotInCriticalSection(context);
1249 
1250  if (!AllocSizeIsValid(size))
1251  elog(ERROR, "invalid memory alloc request size %zu", size);
1252 
1253  context->isReset = false;
1254 
1255  ret = context->methods->alloc(context, size);
1256  if (unlikely(ret == NULL))
1257  {
1259  ereport(ERROR,
1260  (errcode(ERRCODE_OUT_OF_MEMORY),
1261  errmsg("out of memory"),
1262  errdetail("Failed on request of size %zu in memory context \"%s\".",
1263  size, context->name)));
1264  }
1265 
1266  VALGRIND_MEMPOOL_ALLOC(context, ret, size);
1267 
1268  MemSetAligned(ret, 0, size);
1269 
1270  return ret;
1271 }
#define MemSetAligned(start, val, len)
Definition: c.h:1034

◆ palloc_extended()

void* palloc_extended ( Size  size,
int  flags 
)

Definition at line 1274 of file mcxt.c.

1275 {
1276  /* duplicates MemoryContextAllocExtended to avoid increased overhead */
1277  void *ret;
1279 
1280  Assert(MemoryContextIsValid(context));
1281  AssertNotInCriticalSection(context);
1282 
1283  if (!((flags & MCXT_ALLOC_HUGE) != 0 ? AllocHugeSizeIsValid(size) :
1284  AllocSizeIsValid(size)))
1285  elog(ERROR, "invalid memory alloc request size %zu", size);
1286 
1287  context->isReset = false;
1288 
1289  ret = context->methods->alloc(context, size);
1290  if (unlikely(ret == NULL))
1291  {
1292  if ((flags & MCXT_ALLOC_NO_OOM) == 0)
1293  {
1295  ereport(ERROR,
1296  (errcode(ERRCODE_OUT_OF_MEMORY),
1297  errmsg("out of memory"),
1298  errdetail("Failed on request of size %zu in memory context \"%s\".",
1299  size, context->name)));
1300  }
1301  return NULL;
1302  }
1303 
1304  VALGRIND_MEMPOOL_ALLOC(context, ret, size);
1305 
1306  if ((flags & MCXT_ALLOC_ZERO) != 0)
1307  MemSetAligned(ret, 0, size);
1308 
1309  return ret;
1310 }
#define MCXT_ALLOC_ZERO
Definition: fe_memutils.h:18
#define MCXT_ALLOC_HUGE
Definition: fe_memutils.h:16
#define MCXT_ALLOC_NO_OOM
Definition: fe_memutils.h:17
#define AllocHugeSizeIsValid(size)
Definition: memutils.h:49

◆ pfree()

void pfree ( void *  pointer)

Definition at line 1436 of file mcxt.c.

1437 {
1438 #ifdef USE_VALGRIND
1440  MemoryContext context = GetMemoryChunkContext(pointer);
1441 #endif
1442 
1443  MCXT_METHOD(pointer, free_p) (pointer);
1444 
1445 #ifdef USE_VALGRIND
1446  if (method != MCTX_ALIGNED_REDIRECT_ID)
1447  VALGRIND_MEMPOOL_FREE(context, pointer);
1448 #endif
1449 }
static MemoryContextMethodID GetMemoryChunkMethodID(const void *pointer)
Definition: mcxt.c:182
MemoryContext GetMemoryChunkContext(void *pointer)
Definition: mcxt.c:600
#define MCXT_METHOD(pointer, method)
Definition: mcxt.c:173
#define VALGRIND_MEMPOOL_FREE(context, addr)
Definition: memdebug.h:30
MemoryContextMethodID
@ MCTX_ALIGNED_REDIRECT_ID

◆ pg_free()

◆ pg_malloc()

void* pg_malloc ( size_t  size)

Definition at line 47 of file fe_memutils.c.

48 {
49  return pg_malloc_internal(size, 0);
50 }
static void * pg_malloc_internal(size_t size, int flags)
Definition: fe_memutils.c:23

References pg_malloc_internal().

Referenced by _Clone(), _CustomReadFunc(), _PrintFileData(), _skipData(), add_one_elt(), add_stringlist_item(), ahprintf(), ArchiveEntry(), archprintf(), avlInsertNode(), buildACLCommands(), BuildArchiveDependencies(), check_testspec(), CloneArchive(), collectComments(), collectRoleNames(), collectSecLabels(), conditional_stack_create(), conditional_stack_push(), copyFile(), create_sql_command(), createBoundaryObjects(), CreateVariableSpace(), CreateWalTarMethod(), datapagemap_iterate(), decide_file_actions(), do_connect(), do_watch(), dumpTableData_insert(), escape_quotes_bki(), ExecuteSqlCommandBuf(), find_other_exec_or_die(), findDependencyLoops(), fix_dependencies(), format_numeric_locale(), gen_db_file_maps(), get_comma_elts(), get_db_infos(), get_loadable_libraries(), get_rel_infos(), get_tablespace_paths(), get_template0_info(), getAccessMethods(), getAggregates(), getCasts(), getCollations(), getConstraints(), getConversions(), getDefaultACLs(), getDomainConstraints(), getEventTriggers(), getExtendedStatistics(), getExtensions(), getForeignDataWrappers(), getForeignServers(), getFuncs(), getIndexes(), getInherits(), getLOs(), getNamespaces(), getOpclasses(), getOperators(), getOpfamilies(), getPolicies(), getProcLangs(), getPublicationNamespaces(), getPublications(), getPublicationTables(), getRules(), getSubscriptions(), getTableAttrs(), getTimelineHistory(), getTransforms(), getTriggers(), getTSConfigurations(), getTSDictionaries(), getTSParsers(), getTSTemplates(), getTypes(), identify_locking_dependencies(), InitArchiveFmt_Custom(), InitArchiveFmt_Directory(), InitArchiveFmt_Null(), InitArchiveFmt_Tar(), libpq_fetch_file(), listSchemas(), load_resultmap(), main(), makeTableDataInfo(), NewDumpOptions(), parallel_exec_prog(), parallel_transfer_all_new_dbs(), ParallelBackupStart(), parse_manifest_file(), ParseScript(), parseScriptWeight(), parseVariable(), prepareCommand(), pretty_wal_size(), print_aligned_text(), print_aligned_vertical(), printCrosstab(), PrintResultInCrosstab(), process_queued_fetch_requests(), pset_quoted_string(), quote_identifier(), quote_if_needed(), rankSort(), read_controlfile(), read_file_contents(), ReadDataFromArchiveNone(), readfile(), readMessageFromPipe(), ReadStr(), ReadToc(), ready_list_init(), replace_token(), rewind_parseTimeLineHistory(), run_all_permutations(), run_permutation(), savePsetInfo(), setup_bin_paths(), SetVariable(), SetVariableHooks(), simple_oid_list_append(), simple_ptr_list_append(), simple_string_list_append(), slurpFile(), sortDumpableObjects(), SplitGUCList(), sql_exec(), sql_exec_searchtables(), strtokx(), tar_open_for_write(), tarPrintf(), TopoSort(), wait_for_tests(), WaitForTerminatingWorkers(), and WriteDataChunks().

◆ pg_malloc0()

◆ pg_malloc_extended()

void* pg_malloc_extended ( size_t  size,
int  flags 
)

Definition at line 59 of file fe_memutils.c.

60 {
61  return pg_malloc_internal(size, flags);
62 }

References pg_malloc_internal().

Referenced by do_lo_import(), and pg_log_generic_v().

◆ pg_realloc()

void* pg_realloc ( void *  ptr,
size_t  size 
)

Definition at line 65 of file fe_memutils.c.

66 {
67  void *tmp;
68 
69  /* Avoid unportable behavior of realloc(NULL, 0) */
70  if (ptr == NULL && size == 0)
71  size = 1;
72  tmp = realloc(ptr, size);
73  if (!tmp)
74  {
75  fprintf(stderr, _("out of memory\n"));
77  }
78  return tmp;
79 }
#define _(x)
Definition: elog.c:91
#define realloc(a, b)
Definition: header.h:60
exit(1)
#define fprintf
Definition: port.h:242
#define EXIT_FAILURE
Definition: settings.h:166

References _, exit(), EXIT_FAILURE, fprintf, and realloc.

Referenced by add_one_elt(), BuildArchiveDependencies(), datapagemap_add(), enlargeVariables(), exec_command_set(), extend_pattern_info_array(), findDumpableDependencies(), identify_locking_dependencies(), main(), ParseScript(), read_file_contents(), readfile(), readMessageFromPipe(), ReadToc(), repalloc(), replaceVariable(), and rewind_parseTimeLineHistory().

◆ pg_strdup()

char* pg_strdup ( const char *  in)

Definition at line 85 of file fe_memutils.c.

86 {
87  char *tmp;
88 
89  if (!in)
90  {
91  fprintf(stderr,
92  _("cannot duplicate null pointer (internal error)\n"));
94  }
95  tmp = strdup(in);
96  if (!tmp)
97  {
98  fprintf(stderr, _("out of memory\n"));
100  }
101  return tmp;
102 }

References _, exit(), EXIT_FAILURE, and fprintf.

Referenced by _allocAH(), _ArchiveEntry(), _becomeUser(), _check_database_version(), _getObjectDescription(), _selectOutputSchema(), _selectTableAccessMethod(), _selectTablespace(), _tarGetHeader(), add_one_elt(), add_stringlist_item(), adjust_data_dir(), append_depends_on_extension(), ArchiveEntry(), bool_substitute_hook(), check_locale_name(), check_required_directory(), CloneArchive(), collectComments(), collectRoleNames(), collectSecLabels(), comp_keyword_case_substitute_hook(), ConnectDatabase(), constructConnStr(), convertRegProcReference(), convertTSFunction(), create_script_for_old_cluster_deletion(), createBoundaryObjects(), CreateWalDirectoryMethod(), default_icu_locale(), describeOneTableDetails(), describeRoles(), dir_open_for_write(), do_pset(), dumpAccessMethod(), dumpAttrDef(), dumpBaseType(), dumpCollation(), dumpCompositeType(), dumpConversion(), dumpDatabase(), dumpDomain(), dumpEnumType(), dumpEventTrigger(), dumpExtension(), dumpForeignDataWrapper(), dumpForeignServer(), dumpIndex(), dumpNamespace(), dumpOpclass(), dumpOpfamily(), dumpOptionsFromRestoreOptions(), dumpPolicy(), dumpProcLang(), dumpPublication(), dumpRangeType(), dumpRoleGUCPrivs(), dumpRule(), dumpSearchPath(), dumpSequence(), dumpStatisticsExt(), dumpSubscription(), dumpTable(), dumpTableConstraintComment(), dumpTableData(), dumpTableSchema(), dumpTablespaces(), dumpTrigger(), dumpTSConfig(), dumpTSDictionary(), dumpTSParser(), dumpTSTemplate(), dumpUndefinedType(), echo_substitute_hook(), encodingid_to_string(), exec_command_g(), exec_command_gset(), exec_command_password(), exec_command_set(), fetch_count_substitute_hook(), find_matching_ts_config(), fix_path_separator(), flagInhAttrs(), flagInhIndexes(), flagInhTables(), format_numeric_locale(), get_comma_elts(), get_control_data(), get_db_infos(), get_id(), get_language_name(), get_loadable_libraries(), get_opts(), get_rel_infos(), get_restricted_token(), get_sock_dir(), get_synchronized_snapshot(), get_tablespace_paths(), get_template0_info(), get_user_info(), getAccessMethods(), getAggregates(), getCollations(), getConstraints(), getConversions(), getDefaultACLs(), getDomainConstraints(), getEventTriggers(), getExtendedStatistics(), getExtensions(), getForeignDataWrappers(), getForeignServers(), getFormattedTypeName(), getFuncs(), getIndexes(), getLOs(), getNamespaces(), getOpclasses(), getOperators(), getOpfamilies(), getPolicies(), getProcLangs(), getPublications(), getPublicationTables(), getRestoreCommand(), getRules(), gets_fromFile(), getSubscriptions(), getTableAttrs(), getTables(), getTriggers(), getTSConfigurations(), getTSDictionaries(), getTSParsers(), getTSTemplates(), getTypes(), getVariable(), handle_args(), histcontrol_substitute_hook(), histsize_substitute_hook(), identify_target_directory(), ignoreeof_substitute_hook(), initializeInput(), insert_filehash_entry(), listSchemas(), load_resultmap(), locale_date_order(), lookupCreateVariable(), main(), MainLoop(), makeAlterConfigCommand(), open_result_files(), parallel_exec_prog(), parallel_transfer_all_new_dbs(), parse_psql_options(), parse_slash_copy(), parseAclItem(), parseCommandLine(), parseQuery(), ParseScript(), parseScriptWeight(), pg_send_history(), postprocess_sql_command(), printTableAddFooter(), printTableSetFooter(), process_backslash_command(), process_source_file(), process_target_file(), processEncodingEntry(), processExtensionTables(), processSearchPathEntry(), progress_update_filename(), psql_get_variable(), pstrdup(), putVariable(), read_post_opts(), readfile(), ReconnectToServer(), regression_main(), RestoreArchive(), run_schedule(), run_simple_query(), RunIdentifySystem(), sanitize_line(), savePsetInfo(), search_directory(), sendCommand(), set_info_version(), set_locale_and_encoding(), setDecimalLocale(), setup(), setup_config(), setup_connection(), setup_pgdata(), SetVariable(), SetVariableHooks(), show_context_substitute_hook(), simple_action_list_append(), simple_prompt_extended(), split_path(), split_to_stringlist(), tar_open_for_write(), tarOpen(), and verbosity_substitute_hook().

◆ pnstrdup()

char* pnstrdup ( const char *  in,
Size  size 
)

Definition at line 1635 of file mcxt.c.

1636 {
1637  char *out;
1638 
1639  len = strnlen(in, len);
1640 
1641  out = palloc(len + 1);
1642  memcpy(out, in, len);
1643  out[len] = '\0';
1644 
1645  return out;
1646 }
void * palloc(Size size)
Definition: mcxt.c:1210
const void size_t len
size_t strnlen(const char *str, size_t maxlen)
Definition: strnlen.c:26

◆ psprintf()

char* psprintf ( const char *  fmt,
  ... 
)

◆ pstrdup()

char* pstrdup ( const char *  in)

Definition at line 1624 of file mcxt.c.

1625 {
1627 }
char * MemoryContextStrdup(MemoryContext context, const char *string)
Definition: mcxt.c:1611

◆ pvsnprintf()

char size_t pvsnprintf ( char *  buf,
size_t  len,
const char *  fmt,
va_list  args 
)

◆ repalloc()

void* repalloc ( void *  pointer,
Size  size 
)

Definition at line 1456 of file mcxt.c.

1457 {
1458 #ifdef USE_VALGRIND
1460 #endif
1461 #if defined(USE_ASSERT_CHECKING) || defined(USE_VALGRIND)
1462  MemoryContext context = GetMemoryChunkContext(pointer);
1463 #endif
1464  void *ret;
1465 
1466  if (!AllocSizeIsValid(size))
1467  elog(ERROR, "invalid memory alloc request size %zu", size);
1468 
1469  AssertNotInCriticalSection(context);
1470 
1471  /* isReset must be false already */
1472  Assert(!context->isReset);
1473 
1474  ret = MCXT_METHOD(pointer, realloc) (pointer, size);
1475  if (unlikely(ret == NULL))
1476  {
1477  MemoryContext cxt = GetMemoryChunkContext(pointer);
1478 
1480  ereport(ERROR,
1481  (errcode(ERRCODE_OUT_OF_MEMORY),
1482  errmsg("out of memory"),
1483  errdetail("Failed on request of size %zu in memory context \"%s\".",
1484  size, cxt->name)));
1485  }
1486 
1487 #ifdef USE_VALGRIND
1488  if (method != MCTX_ALIGNED_REDIRECT_ID)
1489  VALGRIND_MEMPOOL_CHANGE(context, pointer, ret, size);
1490 #endif
1491 
1492  return ret;
1493 }
#define VALGRIND_MEMPOOL_CHANGE(context, optr, nptr, size)
Definition: memdebug.h:31