Revert the previous change
and just abort if the object id is overflowed.
This commit is contained in:
parent
09edd84cf8
commit
4c9101f704
16
src/fcobjs.c
16
src/fcobjs.c
|
@ -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)) {
|
||||||
|
|
Loading…
Reference in New Issue