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"
/* The actual share */
static Eina_Share *share;
static Eina_Share *binshare_share;
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
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_Bool ret;
ret = eina_share_common_shutdown(&share);
ret = eina_share_common_shutdown(&binshare_share);
return ret;
}
@ -124,7 +124,7 @@ eina_binshare_del(const char *str)
{
if (!str)
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 *
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 *
eina_binshare_ref(const char *str)
{
if (!str)
{
return (const char *) eina_share_common_ref(share, (const char *) str);
}
return (const char *) eina_share_common_ref(share, (const char *) str);
return (const char *) eina_share_common_ref(binshare_share, (const char *) str);
}
/**
@ -191,7 +187,7 @@ eina_binshare_ref(const char *str)
EAPI int
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
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...
*
@ -60,7 +60,7 @@
#include "eina_share_common.h"
/* The actual share */
static Eina_Share *share;
static Eina_Share *stringshare_share;
static const char EINA_MAGIC_STRINGSHARE_NODE_STR[] = "Eina Stringshare Node";
#ifdef EFL_HAVE_THREADS
@ -484,7 +484,7 @@ Eina_Bool
eina_stringshare_init(void)
{
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)
{
_eina_stringshare_small_init();
@ -508,7 +508,7 @@ eina_stringshare_shutdown(void)
{
Eina_Bool ret;
_eina_stringshare_small_shutdown();
ret = eina_share_common_shutdown(&share);
ret = eina_share_common_shutdown(&stringshare_share);
return ret;
}
@ -572,13 +572,13 @@ eina_stringshare_del(const char *str)
return;
else if (slen < 4)
{
eina_share_common_population_del(share, slen);
eina_share_common_population_del(stringshare_share, slen);
STRINGSHARE_LOCK_SMALL();
_eina_stringshare_small_del(str, slen);
STRINGSHARE_UNLOCK_SMALL();
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();
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)
{
return eina_share_common_ref(share, str);
return eina_share_common_ref(stringshare_share, str);
}
/* special cases */
@ -815,14 +815,14 @@ eina_stringshare_ref(const char *str)
if (slen < 2)
{
eina_share_common_population_add(share, slen);
eina_share_common_population_add(stringshare_share, slen);
return str;
}
else if (slen < 4)
{
const char *s;
eina_share_common_population_add(share, slen);
eina_share_common_population_add(stringshare_share, slen);
STRINGSHARE_LOCK_SMALL();
s = _eina_stringshare_small_add(str, slen);
@ -831,7 +831,7 @@ eina_stringshare_ref(const char *str)
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[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;
return len;
}
@ -869,7 +869,7 @@ eina_stringshare_strlen(const char *str)
EAPI 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"
/* The actual share */
static Eina_Share *share;
static Eina_Share *ustringshare_share;
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_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_Bool ret;
ret = eina_share_common_shutdown(&share);
ret = eina_share_common_shutdown(&ustringshare_share);
return ret;
}
@ -123,7 +123,7 @@ eina_ustringshare_del(const Eina_Unicode *str)
{
if (!str)
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 *
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 *
eina_ustringshare_ref(const Eina_Unicode *str)
{
if (!str)
{
return (Eina_Unicode *) eina_share_common_ref(share, (const char *) str);
}
return (const Eina_Unicode *) eina_share_common_ref(share, (const char *) str);
return (const Eina_Unicode *) eina_share_common_ref(ustringshare_share, (const char *) str);
}
/**
@ -216,7 +212,7 @@ eina_ustringshare_ref(const Eina_Unicode *str)
EAPI int
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;
return len;
}
@ -230,7 +226,7 @@ eina_ustringshare_strlen(const Eina_Unicode *str)
EAPI void
eina_ustringshare_dump(void)
{
eina_share_common_dump(share, NULL, 0);
eina_share_common_dump(ustringshare_share, NULL, 0);
}
/**