Revert the previous change

and just abort if the object id is overflowed.
This commit is contained in:
Akira TAGOH 2015-05-25 21:41:05 +09:00
parent 09edd84cf8
commit 4c9101f704
1 changed files with 1 additions and 15 deletions

View File

@ -70,8 +70,6 @@ static FcObjectType *
_FcObjectLookupOtherTypeByName (const char *str, FcObject *id) _FcObjectLookupOtherTypeByName (const char *str, FcObject *id)
{ {
struct FcObjectOtherTypeInfo *ots, *ot; struct FcObjectOtherTypeInfo *ots, *ot;
static fc_atomic_int_t first_id = 0;
static FcBool overflow = FcFalse;
retry: retry:
ots = fc_atomic_ptr_get (&other_types); ots = fc_atomic_ptr_get (&other_types);
@ -80,11 +78,6 @@ retry:
if (0 == strcmp (ot->object.object, str)) if (0 == strcmp (ot->object.object, str))
break; break;
if (!ots)
{
first_id = fc_atomic_int_add (next_id, 0);
overflow = FcFalse;
}
if (!ot) if (!ot)
{ {
ot = malloc (sizeof (*ot)); ot = malloc (sizeof (*ot));
@ -93,19 +86,12 @@ retry:
ot->object.object = (char *) FcStrdup (str); ot->object.object = (char *) FcStrdup (str);
ot->object.type = FcTypeUnknown; ot->object.type = FcTypeUnknown;
retry_id:
ot->id = fc_atomic_int_add (next_id, +1); ot->id = fc_atomic_int_add (next_id, +1);
if (overflow && ot->id == first_id) if (ot->id < (FC_MAX_BASE_OBJECT + FC_EXT_OBJ_INDEX))
{ {
fprintf (stderr, "Fontconfig error: No object ID to assign\n"); fprintf (stderr, "Fontconfig error: No object ID to assign\n");
abort (); abort ();
} }
if (ot->id < (FC_MAX_BASE_OBJECT + FC_EXT_OBJ_INDEX))
{
overflow = FcTrue;
fc_atomic_ptr_cmpexch (&next_id, ot->id + 1, FC_MAX_BASE_OBJECT + FC_EXT_OBJ_INDEX + 1);
goto retry_id;
}
ot->next = ots; ot->next = ots;
if (!fc_atomic_ptr_cmpexch (&other_types, ots, ot)) { if (!fc_atomic_ptr_cmpexch (&other_types, ots, ot)) {