[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) \
|
||||
return item->next; \
|
||||
else \
|
||||
return *list; \
|
||||
return NULL; \
|
||||
return *list; \
|
||||
} \
|
||||
\
|
||||
static inline type *prefix##_list_detach(type **list, type *item) \
|
||||
|
@ -170,16 +168,23 @@
|
|||
item->next = NULL; \
|
||||
item->prev = NULL; \
|
||||
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) \
|
||||
static inline void prefix##_list_unref(type **list) \
|
||||
{ \
|
||||
type *next, *item = *list; \
|
||||
printf("list_unref\n");\
|
||||
while(item) \
|
||||
{ \
|
||||
printf(" item %p refcount %d", item, item->refcount);\
|
||||
next = item->next; \
|
||||
if(--(item->refcount) <= 0) \
|
||||
{ \
|
||||
|
@ -188,7 +193,6 @@
|
|||
} \
|
||||
item = next; \
|
||||
} \
|
||||
printf("end list_unref\n");\
|
||||
}
|
||||
|
||||
#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_cache_list_next(NULL, atom_next));
|
||||
|
||||
atom_cache->prev = atom_next;
|
||||
atom_cache->next = atom_next->next;
|
||||
|
||||
if(atom_next->next)
|
||||
atom_next->next->prev = atom_cache;
|
||||
|
||||
atom_next->next = atom_cache;
|
||||
atom_cache_list_attach_after(atom_next, atom_cache);
|
||||
}
|
||||
|
||||
p_delete(&atom_rep);
|
||||
|
|
Loading…
Reference in New Issue