Eina: Fix the segfault in eina_stringshare_shutdown with-enable-amalgamation.

SVN revision: 50548
This commit is contained in:
Tom Hacohen 2010-07-27 16:53:49 +00:00
parent 32c7a50118
commit e6ec7adedb
3 changed files with 29 additions and 37 deletions

View File

@ -36,7 +36,7 @@
#include "eina_private.h" #include "eina_private.h"
/* The actual share */ /* The actual share */
static Eina_Share *share; static Eina_Share *binshare_share;
static const char EINA_MAGIC_BINSHARE_NODE_STR[] = "Eina Binshare Node"; static const char EINA_MAGIC_BINSHARE_NODE_STR[] = "Eina Binshare Node";
/*============================================================================* /*============================================================================*
@ -57,7 +57,7 @@ static const char EINA_MAGIC_BINSHARE_NODE_STR[] = "Eina Binshare Node";
EAPI Eina_Bool EAPI Eina_Bool
eina_binshare_init(void) eina_binshare_init(void)
{ {
return eina_share_common_init(&share, EINA_MAGIC_BINSHARE_NODE, EINA_MAGIC_BINSHARE_NODE_STR); return eina_share_common_init(&binshare_share, EINA_MAGIC_BINSHARE_NODE, EINA_MAGIC_BINSHARE_NODE_STR);
} }
/** /**
@ -75,7 +75,7 @@ EAPI Eina_Bool
eina_binshare_shutdown(void) eina_binshare_shutdown(void)
{ {
Eina_Bool ret; Eina_Bool ret;
ret = eina_share_common_shutdown(&share); ret = eina_share_common_shutdown(&binshare_share);
return ret; return ret;
} }
@ -124,7 +124,7 @@ eina_binshare_del(const char *str)
{ {
if (!str) if (!str)
return; return;
eina_share_common_del(share,(const char *) str); eina_share_common_del(binshare_share,(const char *) str);
} }
/** /**
@ -150,7 +150,7 @@ eina_binshare_del(const char *str)
EAPI const char * EAPI const char *
eina_binshare_add_length(const char *str, unsigned int slen) eina_binshare_add_length(const char *str, unsigned int slen)
{ {
return (const char *) eina_share_common_add_length(share,(const char *) str, (slen) * sizeof(char), 0); return (const char *) eina_share_common_add_length(binshare_share,(const char *) str, (slen) * sizeof(char), 0);
} }
/** /**
@ -170,11 +170,7 @@ eina_binshare_add_length(const char *str, unsigned int slen)
EAPI const char * EAPI const char *
eina_binshare_ref(const char *str) eina_binshare_ref(const char *str)
{ {
if (!str) return (const char *) eina_share_common_ref(binshare_share, (const char *) str);
{
return (const char *) eina_share_common_ref(share, (const char *) str);
}
return (const char *) eina_share_common_ref(share, (const char *) str);
} }
/** /**
@ -191,7 +187,7 @@ eina_binshare_ref(const char *str)
EAPI int EAPI int
eina_binshare_length(const char *str) eina_binshare_length(const char *str)
{ {
return eina_share_common_length(share, (const char *) str); return eina_share_common_length(binshare_share, (const char *) str);
} }
/** /**
@ -203,7 +199,7 @@ eina_binshare_length(const char *str)
EAPI void EAPI void
eina_binshare_dump(void) eina_binshare_dump(void)
{ {
eina_share_common_dump(share, NULL, 0); eina_share_common_dump(binshare_share, NULL, 0);
} }
/** /**

View File

@ -26,7 +26,7 @@
*/ */
/** /**
* @page tutorial_ustringshare_page UStringshare Tutorial * @page tutorial_stringshare_page Stringshare Tutorial
* *
* to be written... * to be written...
* *
@ -60,7 +60,7 @@
#include "eina_share_common.h" #include "eina_share_common.h"
/* The actual share */ /* The actual share */
static Eina_Share *share; static Eina_Share *stringshare_share;
static const char EINA_MAGIC_STRINGSHARE_NODE_STR[] = "Eina Stringshare Node"; static const char EINA_MAGIC_STRINGSHARE_NODE_STR[] = "Eina Stringshare Node";
#ifdef EFL_HAVE_THREADS #ifdef EFL_HAVE_THREADS
@ -484,7 +484,7 @@ Eina_Bool
eina_stringshare_init(void) eina_stringshare_init(void)
{ {
Eina_Bool ret; Eina_Bool ret;
ret = eina_share_common_init(&share, EINA_MAGIC_STRINGSHARE_NODE, EINA_MAGIC_STRINGSHARE_NODE_STR); ret = eina_share_common_init(&stringshare_share, EINA_MAGIC_STRINGSHARE_NODE, EINA_MAGIC_STRINGSHARE_NODE_STR);
if (ret) if (ret)
{ {
_eina_stringshare_small_init(); _eina_stringshare_small_init();
@ -508,7 +508,7 @@ eina_stringshare_shutdown(void)
{ {
Eina_Bool ret; Eina_Bool ret;
_eina_stringshare_small_shutdown(); _eina_stringshare_small_shutdown();
ret = eina_share_common_shutdown(&share); ret = eina_share_common_shutdown(&stringshare_share);
return ret; return ret;
} }
@ -572,13 +572,13 @@ eina_stringshare_del(const char *str)
return; return;
else if (slen < 4) else if (slen < 4)
{ {
eina_share_common_population_del(share, slen); eina_share_common_population_del(stringshare_share, slen);
STRINGSHARE_LOCK_SMALL(); STRINGSHARE_LOCK_SMALL();
_eina_stringshare_small_del(str, slen); _eina_stringshare_small_del(str, slen);
STRINGSHARE_UNLOCK_SMALL(); STRINGSHARE_UNLOCK_SMALL();
return; return;
} }
eina_share_common_del(share, str); eina_share_common_del(stringshare_share, str);
} }
/** /**
@ -619,7 +619,7 @@ eina_stringshare_add_length(const char *str, unsigned int slen)
STRINGSHARE_UNLOCK_SMALL(); STRINGSHARE_UNLOCK_SMALL();
return s; return s;
} }
return eina_share_common_add_length(share, str, slen * sizeof(char), sizeof(char)); return eina_share_common_add_length(stringshare_share, str, slen * sizeof(char), sizeof(char));
} }
/** /**
@ -803,7 +803,7 @@ eina_stringshare_ref(const char *str)
if (!str) if (!str)
{ {
return eina_share_common_ref(share, str); return eina_share_common_ref(stringshare_share, str);
} }
/* special cases */ /* special cases */
@ -815,14 +815,14 @@ eina_stringshare_ref(const char *str)
if (slen < 2) if (slen < 2)
{ {
eina_share_common_population_add(share, slen); eina_share_common_population_add(stringshare_share, slen);
return str; return str;
} }
else if (slen < 4) else if (slen < 4)
{ {
const char *s; const char *s;
eina_share_common_population_add(share, slen); eina_share_common_population_add(stringshare_share, slen);
STRINGSHARE_LOCK_SMALL(); STRINGSHARE_LOCK_SMALL();
s = _eina_stringshare_small_add(str, slen); s = _eina_stringshare_small_add(str, slen);
@ -831,7 +831,7 @@ eina_stringshare_ref(const char *str)
return s; return s;
} }
return eina_share_common_ref(share, str); return eina_share_common_ref(stringshare_share, str);
} }
/** /**
@ -855,7 +855,7 @@ eina_stringshare_strlen(const char *str)
if (str[2] == '\0') return 2; if (str[2] == '\0') return 2;
if (str[3] == '\0') return 3; if (str[3] == '\0') return 3;
len = eina_share_common_length(share, (const char *) str); len = eina_share_common_length(stringshare_share, (const char *) str);
len = (len > 0) ? len / (int) sizeof(char) : -1; len = (len > 0) ? len / (int) sizeof(char) : -1;
return len; return len;
} }
@ -869,7 +869,7 @@ eina_stringshare_strlen(const char *str)
EAPI void EAPI void
eina_stringshare_dump(void) eina_stringshare_dump(void)
{ {
eina_share_common_dump(share, _eina_stringshare_small_dump, sizeof(_eina_stringshare_single)); eina_share_common_dump(stringshare_share, _eina_stringshare_small_dump, sizeof(_eina_stringshare_single));
} }
/** /**

View File

@ -35,7 +35,7 @@
#include "eina_private.h" #include "eina_private.h"
/* The actual share */ /* The actual share */
static Eina_Share *share; static Eina_Share *ustringshare_share;
static const char EINA_MAGIC_USTRINGSHARE_NODE_STR[] = "Eina UStringshare Node"; static const char EINA_MAGIC_USTRINGSHARE_NODE_STR[] = "Eina UStringshare Node";
/*============================================================================* /*============================================================================*
@ -56,7 +56,7 @@ static const char EINA_MAGIC_USTRINGSHARE_NODE_STR[] = "Eina UStringshare Node";
Eina_Bool Eina_Bool
eina_ustringshare_init(void) eina_ustringshare_init(void)
{ {
return eina_share_common_init(&share, EINA_MAGIC_USTRINGSHARE_NODE, EINA_MAGIC_USTRINGSHARE_NODE_STR); return eina_share_common_init(&ustringshare_share, EINA_MAGIC_USTRINGSHARE_NODE, EINA_MAGIC_USTRINGSHARE_NODE_STR);
} }
/** /**
@ -74,7 +74,7 @@ Eina_Bool
eina_ustringshare_shutdown(void) eina_ustringshare_shutdown(void)
{ {
Eina_Bool ret; Eina_Bool ret;
ret = eina_share_common_shutdown(&share); ret = eina_share_common_shutdown(&ustringshare_share);
return ret; return ret;
} }
@ -123,7 +123,7 @@ eina_ustringshare_del(const Eina_Unicode *str)
{ {
if (!str) if (!str)
return; return;
eina_share_common_del(share,(const char *) str); eina_share_common_del(ustringshare_share,(const char *) str);
} }
/** /**
@ -149,7 +149,7 @@ eina_ustringshare_del(const Eina_Unicode *str)
EAPI const Eina_Unicode * EAPI const Eina_Unicode *
eina_ustringshare_add_length(const Eina_Unicode *str, unsigned int slen) eina_ustringshare_add_length(const Eina_Unicode *str, unsigned int slen)
{ {
return (const Eina_Unicode *) eina_share_common_add_length(share,(const char *) str, slen * sizeof(Eina_Unicode), sizeof(Eina_Unicode)); return (const Eina_Unicode *) eina_share_common_add_length(ustringshare_share,(const char *) str, slen * sizeof(Eina_Unicode), sizeof(Eina_Unicode));
} }
/** /**
@ -195,11 +195,7 @@ eina_ustringshare_add(const Eina_Unicode *str)
EAPI const Eina_Unicode * EAPI const Eina_Unicode *
eina_ustringshare_ref(const Eina_Unicode *str) eina_ustringshare_ref(const Eina_Unicode *str)
{ {
if (!str) return (const Eina_Unicode *) eina_share_common_ref(ustringshare_share, (const char *) str);
{
return (Eina_Unicode *) eina_share_common_ref(share, (const char *) str);
}
return (const Eina_Unicode *) eina_share_common_ref(share, (const char *) str);
} }
/** /**
@ -216,7 +212,7 @@ eina_ustringshare_ref(const Eina_Unicode *str)
EAPI int EAPI int
eina_ustringshare_strlen(const Eina_Unicode *str) eina_ustringshare_strlen(const Eina_Unicode *str)
{ {
int len = eina_share_common_length(share, (const char *) str); int len = eina_share_common_length(ustringshare_share, (const char *) str);
len = (len > 0) ? len / (int) sizeof(Eina_Unicode) : -1; len = (len > 0) ? len / (int) sizeof(Eina_Unicode) : -1;
return len; return len;
} }
@ -230,7 +226,7 @@ eina_ustringshare_strlen(const Eina_Unicode *str)
EAPI void EAPI void
eina_ustringshare_dump(void) eina_ustringshare_dump(void)
{ {
eina_share_common_dump(share, NULL, 0); eina_share_common_dump(ustringshare_share, NULL, 0);
} }
/** /**