- node_t *other;
- TRACE("s3", "find_preds: unlinking marked item %p; next is %p", item, next);
- if ((other = SYNC_CAS(&pred->next[level], item, STRIP_TAG(next, TAG1))) == item) {
- item = (node_t *)STRIP_TAG(next, TAG1);
- if (EXPECT_FALSE(item == NULL))
- break;
- next = item->next[level];
- TRACE("s3", "find_preds: now the current item is %p next is %p", item, next);
+ TRACE("s3", "find_preds: unlinking marked item %p; next is 0x%llx", item, next);
+ uint64_t other = SYNC_CAS(&pred->next[level], (uint64_t)(size_t)item, STRIP_TAG(next, TAG1));
+ if (other == (uint64_t)(size_t)item) {
+ item = (node_t *)(size_t)STRIP_TAG(next, TAG1);
+ next = (item != NULL) ? item->next[level] : DOES_NOT_EXIST;
+ TRACE("s3", "find_preds: now the current item is %p next is 0x%llx", item, next);