[xutil] Add list_attach_after() and use it for cache atom
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
2a4971b725
commit
eaf38a6a69
|
@ -154,9 +154,7 @@
|
||||||
{ \
|
{ \
|
||||||
if(item->next) \
|
if(item->next) \
|
||||||
return item->next; \
|
return item->next; \
|
||||||
else \
|
|
||||||
return *list; \
|
return *list; \
|
||||||
return NULL; \
|
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
static inline type *prefix##_list_detach(type **list, type *item) \
|
static inline type *prefix##_list_detach(type **list, type *item) \
|
||||||
|
@ -170,16 +168,23 @@
|
||||||
item->next = NULL; \
|
item->next = NULL; \
|
||||||
item->prev = NULL; \
|
item->prev = NULL; \
|
||||||
return item; \
|
return item; \
|
||||||
|
} \
|
||||||
|
static inline type *prefix##_list_attach_after(type *item1, type *item2) \
|
||||||
|
{ \
|
||||||
|
item2->prev = item1; \
|
||||||
|
item2->next = item1->next; \
|
||||||
|
if(item1->next) \
|
||||||
|
item1->next->prev = item2; \
|
||||||
|
item1->next = item2; \
|
||||||
|
return item2; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DO_SLIST_UNREF(type, prefix, dtor) \
|
#define DO_SLIST_UNREF(type, prefix, dtor) \
|
||||||
static inline void prefix##_list_unref(type **list) \
|
static inline void prefix##_list_unref(type **list) \
|
||||||
{ \
|
{ \
|
||||||
type *next, *item = *list; \
|
type *next, *item = *list; \
|
||||||
printf("list_unref\n");\
|
|
||||||
while(item) \
|
while(item) \
|
||||||
{ \
|
{ \
|
||||||
printf(" item %p refcount %d", item, item->refcount);\
|
|
||||||
next = item->next; \
|
next = item->next; \
|
||||||
if(--(item->refcount) <= 0) \
|
if(--(item->refcount) <= 0) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -188,7 +193,6 @@
|
||||||
} \
|
} \
|
||||||
item = next; \
|
item = next; \
|
||||||
} \
|
} \
|
||||||
printf("end list_unref\n");\
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -233,13 +233,7 @@ xutil_intern_atom_reply(xcb_connection_t *c, xutil_atom_cache_t **atoms,
|
||||||
atom_next && atom_next->next && a_strcmp(atom_req.name, atom_next->next->name) > 0;
|
atom_next && atom_next->next && a_strcmp(atom_req.name, atom_next->next->name) > 0;
|
||||||
atom_next = atom_cache_list_next(NULL, atom_next));
|
atom_next = atom_cache_list_next(NULL, atom_next));
|
||||||
|
|
||||||
atom_cache->prev = atom_next;
|
atom_cache_list_attach_after(atom_next, atom_cache);
|
||||||
atom_cache->next = atom_next->next;
|
|
||||||
|
|
||||||
if(atom_next->next)
|
|
||||||
atom_next->next->prev = atom_cache;
|
|
||||||
|
|
||||||
atom_next->next = atom_cache;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p_delete(&atom_rep);
|
p_delete(&atom_rep);
|
||||||
|
|
Loading…
Reference in New Issue