2008-09-19 Hans Petter Jansson <hpj@novell.com>
Rewrite most of GHashTable to use open addressing with quadratic
probing instead of chaining. This has the potential to reduce memory
fragmentation significantly, while being slightly faster due to
better locality and no need to call alloc/free functions for nodes.
Benchmarks suggest it also uses less memory overall.
* glib/ghash.c (prime_mod): Table of suitable primes for
initial-probe distribution.
(g_hash_table_set_shift): New function.
(g_hash_table_find_closest_shift): New function.
(g_hash_table_set_shift_from_size): New function.
(g_hash_table_lookup_node_for_insertion): New function.
(g_hash_table_lookup_node): Rewritten to return node index instead of
pointer, use quadratic probe on flat table, and not return insertion
data. The latter saves some computation for read-only lookups.
(g_hash_table_remove_node): Rewrite to take a pointer directly to the
node structure to remove, and clear that. Remove unlinking code.
(g_hash_table_remove_all_nodes): Rewrite to not clear nodes
individually, but en masse using memset () after potentially calling
notify functions.
(iter_remove_or_steal): Use new data structure and algorithm. Vastly
simplified - now just a call to g_hash_table_remove_node ().
(g_hash_table_resize): New resize code, re-indexing with new prime
and cleaning up tombstones.
(g_hash_table_maybe_resize): Table may hold 8 buckets minimum, no less
than 1/4 load excluding tombstones, and no more than 15/16 load
including tombstones. These numbers are the results of a lot of
benchmarking with multiple complex applications, and should not be
changed lightly.
(g_hash_table_iter_next)
(g_hash_table_lookup)
(g_hash_table_lookup_extended)
(g_hash_table_insert_internal)
(g_hash_table_remove_internal)
(g_hash_table_foreach_remove_or_steal)
(g_hash_table_foreach)
(g_hash_table_find)
(g_hash_table_get_keys)
(g_hash_table_get_values): Use new data structure and algorithm,
fairly trivial changes.
svn path=/trunk/; revision=7518
2008-09-19 Tor Lillqvist <tml@novell.com>
* glib/gutils.c (_glib_get_dll_directory)
* glib/gspawn-win32.c (do_spawn_with_pipes): Be a bit less
restrictive, look for the helper programs in the same folder where
the GLib DLL is, not necessarily in a "bin" subfolder of the top
GLib installation folder.
svn path=/trunk/; revision=7511
2008-09-16 Michael Natterer <mitch@imendio.com>
* gcontenttype.c (g_content_type_guess): can't assign the return
value of g_strdupv() to an array. Fill the array manually with
const strings instead (it is never freed anyway). Fixes the
build. Also fixed indentation.
svn path=/trunk/; revision=7501
2008-09-16 Wouter Bolsterlee <wbolster@svn.gnome.org>
* gdesktopappinfo.c (g_desktop_app_info_new_from_keyfile):
Fix trivial typo to unbreak the build (there was a colon
instead of a semicolon at the end of a statement).
svn path=/trunk/; revision=7500
2008-09-16 Tor Lillqvist <tml@novell.com>
* win32/vs9: New folder. Project files for use with MSVS9. Based
on the MSVS8 project files is win32/vs8. Four configurations:
Debug|Win32, Release|Win32, Debug|x64 and Release|x64. DLL names
simplified to of the style glib-2-vs9.dll.
svn path=/trunk/; revision=7497
2008-09-16 Tor Lillqvist <tml@novell.com>
* glib/gtimer.c (g_time_val_to_iso8601): time_t is 64 bits in all
the newer Microsoft C libraries, not just 64-bit ones. So to avoid
crash if compiled with newer MSVSes, use a separate time_t
variable in all cases on Windows.
svn path=/trunk/; revision=7496
2008-09-16 Tor Lillqvist <tml@novell.com>
* glib/gbacktrace.h: Define G_BREAKPOINT() also for 64-bit MSVC,
using the __debugbreak() intrinsic.
svn path=/trunk/; revision=7495
* gcontenttype.c (g_content_type_guess): Check whether there's a '/'
at the end of the filename, and declare it a directory.
Patch by Bastien Nocera
svn path=/trunk/; revision=7491
2008-09-15 Tor Lillqvist <tml@novell.com>
* win32/vs8/*.vcproj: Drop the "win32" part from under
"dependencies" so that the same project files can be used also
for 64-bit compilation by just having a different
"dependencies" folder containing 64-bit packages instead. At
least, I hope it will work out some way like that. MSVS
project files really are a pain to maintain. Much information
is typically copied for four different configurations
"Debug|Win32", "Release|Win32", "Debug|x64" and "Release|x64"
instead of having common stuff listed just once and only different
parametrisations. Or am I missing something?
Make the "Release" configuration work, too. Use correct character
set for the gspawn-win32-helper programs. Use correct subsystem
for the non-console one.
svn path=/trunk/; revision=7490
2008-09-15 Tor Lillqvist <tml@novell.com>
* config.h.win32.in: Update to match what the configure script
produces. Just for uniformity, only commented out parts affected.
svn path=/trunk/; revision=7489
2008-09-15 Tor Lillqvist <tml@novell.com>
* win32/vs8/*.vcproj: Don't use Detect64BitPortabilityProblems
as those warnings are misleading. They don't take into
consideration ifdefs in glibconfig.h and elsewhere for _WIN64.
svn path=/trunk/; revision=7488
2008-09-15 Tor Lillqvist <tml@novell.com>
* win32/vs8/gobject.vcproj
* win32/vs8/gthread.vcproj: Drop G*_EXPORTS from
PreprocessorDefinitions, nothing looks for such
macros.
svn path=/trunk/; revision=7486
2008-09-15 Tor Lillqvist <tml@novell.com>
* win32/vs8/glib.vcproj: Add DLL_EXPORT to export also the
GLIB_VAR variables that aren't mentioned in glib.symbols.
svn path=/trunk/; revision=7485
2008-09-15 Tor Lillqvist <tml@novell.com>
* win32/vs8/*.vcproj: Update to match the Makefile.am files. Drop
G*_EXPORTS from PreprocessorDefinitions, nothing looks for such
macros. Add G_DISABLE_DEPRECATED. Add PCRE_STATIC for glib to
avoid exporting the pcre functions. Add G_LOG_DOMAIN for gobject.
svn path=/trunk/; revision=7484
2008-09-14 Cosimo Cecchi <cosimoc@gnome.org>
Bug 551887 – Docs for g_desktop_app_info_new_from_filename ()
aren't clear.
* gdesktopappinfo.c: add a note in the docs clarifying what the
"filename" parameter really is.
svn path=/trunk/; revision=7481
2008-09-13 Tor Lillqvist <tml@novell.com>
* glib/gutils.h
* glib/gwin32.h: Deprecate G_WIN32_DLLMAIN_FOR_DLL_NAME(),
g_win32_get_package_installation_directory() and
g_win32_get_package_installation_subdirectory() as their
documentation has warned for a while. Sorry that I forgot to do
this before 2.18.0.
* glib/gwin32.c (g_win32_get_package_installation_directory):
Print a warning if a non-NULL package parameter is passed to this
function, as that is deprecated usage, as the documentation says.
svn path=/trunk/; revision=7480
2008-09-12 Tor Lillqvist <tml@novell.com>
* gwin32appinfo.c (g_win32_app_info_launch): Don't call
FormatMessage() etc here. Call g_win32_error_message() instead
which already does all that. Besides, the code was broken as it
called the default "A" version of FormatMessage() but still
thought it produced a wide string.
svn path=/trunk/; revision=7472
2008-09-11 Matthias Clasen <mclasen@redhat.com>
Bug 548321 – <string.h> is not included in gi18n-lib.h
* glib/gi18n.h:
* glib/gi18n-lib.h: Include string.h, since strlen is used in
the macros. Pointed out by Ignacio Casal Quinteiro
svn path=/trunk/; revision=7455
2008-09-09 Matthias Clasen <mclasen@redhat.com>
Bug 551228 – G_STRFUNC on recent Sun compiler should be expanded to
__func__ rather than '???'
* glib/gmacros.h: Don't use glibconfig.h defines in gmacros.h,
as the comment up top says. Instead look at __STDC_VERSION__.
Problem reported by Lin Ma.
svn path=/trunk/; revision=7451
2008-09-09 Matthias Clasen <mclasen@redhat.com>
Bug 523463 – Core dump in gmain.c:2482:IA__g_main_context_check()
* glib/gmain.c (g_main_context_check): Be robust against setting
event fields on the fly, as e.g. happens in linc. Tracked down
by Paul Smith, fix proposed by Owen Taylor.
svn path=/trunk/; revision=7447