mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-13 07:56:17 +01:00
initialize GSlice config from G_SLICE environemtn variable. we support
Mon Jan 23 16:46:20 2006 Tim Janik <timj@imendio.com> * glib/gslice.c (slice_config_init): initialize GSlice config from G_SLICE environemtn variable. we support G_SLICE=always-malloc currently, which forces all g_slice_*() allocations to use the system malloc instead. * glib/gutils.c: g_parse_debug_string(): added a note about not using g_malloc() here. _g_getenv_nomalloc(): getenv() variant that doesn't use g_malloc or g_slice. contains only guesswork in the WIN32 branch.
This commit is contained in:
parent
e511719c33
commit
75db578288
12
ChangeLog
12
ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
Mon Jan 23 16:46:20 2006 Tim Janik <timj@imendio.com>
|
||||||
|
|
||||||
|
* glib/gslice.c (slice_config_init): initialize GSlice config from
|
||||||
|
G_SLICE environemtn variable. we support G_SLICE=always-malloc
|
||||||
|
currently, which forces all g_slice_*() allocations to use the system
|
||||||
|
malloc instead.
|
||||||
|
|
||||||
|
* glib/gutils.c:
|
||||||
|
g_parse_debug_string(): added a note about not using g_malloc() here.
|
||||||
|
_g_getenv_nomalloc(): getenv() variant that doesn't use g_malloc or
|
||||||
|
g_slice. contains only guesswork in the WIN32 branch.
|
||||||
|
|
||||||
2006-01-18 Matthias Clasen <mclasen@redhat.com>
|
2006-01-18 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* Bump version
|
* Bump version
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
Mon Jan 23 16:46:20 2006 Tim Janik <timj@imendio.com>
|
||||||
|
|
||||||
|
* glib/gslice.c (slice_config_init): initialize GSlice config from
|
||||||
|
G_SLICE environemtn variable. we support G_SLICE=always-malloc
|
||||||
|
currently, which forces all g_slice_*() allocations to use the system
|
||||||
|
malloc instead.
|
||||||
|
|
||||||
|
* glib/gutils.c:
|
||||||
|
g_parse_debug_string(): added a note about not using g_malloc() here.
|
||||||
|
_g_getenv_nomalloc(): getenv() variant that doesn't use g_malloc or
|
||||||
|
g_slice. contains only guesswork in the WIN32 branch.
|
||||||
|
|
||||||
2006-01-18 Matthias Clasen <mclasen@redhat.com>
|
2006-01-18 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* Bump version
|
* Bump version
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
Mon Jan 23 16:46:20 2006 Tim Janik <timj@imendio.com>
|
||||||
|
|
||||||
|
* glib/gslice.c (slice_config_init): initialize GSlice config from
|
||||||
|
G_SLICE environemtn variable. we support G_SLICE=always-malloc
|
||||||
|
currently, which forces all g_slice_*() allocations to use the system
|
||||||
|
malloc instead.
|
||||||
|
|
||||||
|
* glib/gutils.c:
|
||||||
|
g_parse_debug_string(): added a note about not using g_malloc() here.
|
||||||
|
_g_getenv_nomalloc(): getenv() variant that doesn't use g_malloc or
|
||||||
|
g_slice. contains only guesswork in the WIN32 branch.
|
||||||
|
|
||||||
2006-01-18 Matthias Clasen <mclasen@redhat.com>
|
2006-01-18 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* Bump version
|
* Bump version
|
||||||
|
@ -180,10 +180,10 @@ static inline gsize allocator_get_magazine_threshold (Allocator *allocator,
|
|||||||
guint ix);
|
guint ix);
|
||||||
|
|
||||||
/* --- variables --- */
|
/* --- variables --- */
|
||||||
static GPrivate *private_thread_memory = NULL;
|
static GPrivate *private_thread_memory = NULL;
|
||||||
static gsize sys_page_size = 0;
|
static gsize sys_page_size = 0;
|
||||||
static Allocator allocator[1] = { { 0, }, };
|
static Allocator allocator[1] = { { 0, }, };
|
||||||
static SliceConfig slice_config = {
|
static SliceConfig slice_config = {
|
||||||
FALSE, /* always_malloc */
|
FALSE, /* always_malloc */
|
||||||
FALSE, /* bypass_magazines */
|
FALSE, /* bypass_magazines */
|
||||||
15 * 1000, /* working_set_msecs */
|
15 * 1000, /* working_set_msecs */
|
||||||
@ -255,6 +255,23 @@ g_slice_get_config_state (GSliceConfig ckey,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
slice_config_init (SliceConfig *config)
|
||||||
|
{
|
||||||
|
/* don't use g_malloc/g_message here */
|
||||||
|
gchar buffer[1024];
|
||||||
|
const gchar *val = _g_getenv_nomalloc ("G_SLICE", buffer);
|
||||||
|
static const GDebugKey keys[] = {
|
||||||
|
{ "always-malloc", 1 << 0 },
|
||||||
|
};
|
||||||
|
gint flags = !val ? 0 : g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
|
||||||
|
*config = slice_config;
|
||||||
|
if (flags & (1 << 0)) /* always-malloc */
|
||||||
|
{
|
||||||
|
config->always_malloc = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
g_slice_init_nomessage (void)
|
g_slice_init_nomessage (void)
|
||||||
{
|
{
|
||||||
@ -273,7 +290,7 @@ g_slice_init_nomessage (void)
|
|||||||
#endif
|
#endif
|
||||||
mem_assert (sys_page_size >= 2 * LARGEALIGNMENT);
|
mem_assert (sys_page_size >= 2 * LARGEALIGNMENT);
|
||||||
mem_assert ((sys_page_size & (sys_page_size - 1)) == 0);
|
mem_assert ((sys_page_size & (sys_page_size - 1)) == 0);
|
||||||
allocator->config = slice_config;
|
slice_config_init (&allocator->config);
|
||||||
allocator->min_page_size = sys_page_size;
|
allocator->min_page_size = sys_page_size;
|
||||||
#if HAVE_POSIX_MEMALIGN || HAVE_MEMALIGN
|
#if HAVE_POSIX_MEMALIGN || HAVE_MEMALIGN
|
||||||
/* allow allocation of pages up to 8KB (with 8KB alignment).
|
/* allow allocation of pages up to 8KB (with 8KB alignment).
|
||||||
|
@ -576,6 +576,11 @@ g_parse_debug_string (const gchar *string,
|
|||||||
guint result = 0;
|
guint result = 0;
|
||||||
|
|
||||||
g_return_val_if_fail (string != NULL, 0);
|
g_return_val_if_fail (string != NULL, 0);
|
||||||
|
|
||||||
|
/* this function is used by gmem.c/gslice.c initialization code,
|
||||||
|
* so introducing malloc dependencies here would require adaptions
|
||||||
|
* of those code portions.
|
||||||
|
*/
|
||||||
|
|
||||||
if (!g_ascii_strcasecmp (string, "all"))
|
if (!g_ascii_strcasecmp (string, "all"))
|
||||||
{
|
{
|
||||||
@ -1155,6 +1160,64 @@ g_getenv (const gchar *variable)
|
|||||||
#endif /* G_OS_WIN32 */
|
#endif /* G_OS_WIN32 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* _g_getenv_nomalloc
|
||||||
|
* this function does a getenv() without doing any kind of allocation
|
||||||
|
* through glib. it's suitable for chars <= 127 only (both, for the
|
||||||
|
* variable name and the contents) and for contents < 1024 chars in
|
||||||
|
* length. also, it aliases "" to a NULL return value.
|
||||||
|
**/
|
||||||
|
const gchar*
|
||||||
|
_g_getenv_nomalloc (const gchar *variable,
|
||||||
|
gchar buffer[1024])
|
||||||
|
{
|
||||||
|
#ifndef G_OS_WIN32
|
||||||
|
const gchar *retval = getenv (variable);
|
||||||
|
if (retval && retval[0])
|
||||||
|
{
|
||||||
|
gint l = strlen (retval);
|
||||||
|
if (l < 1024)
|
||||||
|
{
|
||||||
|
strncpy (buffer, retval, l);
|
||||||
|
buffer[l] = 0;
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
#else /* G_OS_WIN32 */
|
||||||
|
if (G_WIN32_HAVE_WIDECHAR_API ())
|
||||||
|
{
|
||||||
|
/* convert variable name to wchar_t without malloc */
|
||||||
|
wchar_t wname[256], result[1024];
|
||||||
|
gint i, l = strlen (variable);
|
||||||
|
if (l >= 256)
|
||||||
|
return NULL;
|
||||||
|
for (i = 0; variable[i]; i++)
|
||||||
|
wname[i] = variable[i];
|
||||||
|
wname[i] = 0;
|
||||||
|
l = GetEnvironmentVariableW (wname, result, 1024);
|
||||||
|
if (l > 0 && l < 1024 && result[0])
|
||||||
|
{
|
||||||
|
/* convert variable contents from wchar_t without malloc */
|
||||||
|
for (i = 0; i < l; i++)
|
||||||
|
buffer[i] = result[i];
|
||||||
|
buffer[i] = 0;
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gint l = GetEnvironmentVariableW (variable, buffer, 1024);
|
||||||
|
if (l > 0 && l < 1024 && buffer[0])
|
||||||
|
{
|
||||||
|
buffer[l] = 0;
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
#endif /* G_OS_WIN32 */
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* g_setenv:
|
* g_setenv:
|
||||||
* @variable: the environment variable to set, must not contain '='.
|
* @variable: the environment variable to set, must not contain '='.
|
||||||
|
@ -211,6 +211,8 @@ gboolean g_setenv (const gchar *variable,
|
|||||||
gboolean overwrite);
|
gboolean overwrite);
|
||||||
void g_unsetenv (const gchar *variable);
|
void g_unsetenv (const gchar *variable);
|
||||||
gchar** g_listenv (void);
|
gchar** g_listenv (void);
|
||||||
|
const gchar* _g_getenv_nomalloc (const gchar *variable,
|
||||||
|
gchar buffer[1024]);
|
||||||
|
|
||||||
/* we try to provide a usefull equivalent for ATEXIT if it is
|
/* we try to provide a usefull equivalent for ATEXIT if it is
|
||||||
* not defined, but use is actually abandoned. people should
|
* not defined, but use is actually abandoned. people should
|
||||||
|
Loading…
Reference in New Issue
Block a user