On Saturday, 12 October 2013 at 06:16:24 UTC, Rainer Schuetze wrote:
in pseudo-assembly missing null-checks:

Thread1 (R = P)        Thread2 (S = R)

                       mov ecx,[R]
                       ; thread suspended

You need an sequentially consistent write. You also need to increment the refcount BEFORE ! This codegen is incorrect.

mov eax,[P]
inc [eax].refcnt

Same here.

mov ebx,[R]
mov [R],eax
dec [ebx].refcnt      ; refcnt of O now 0
jnz done
call delete_ebx
                       ; thread resumed
                       inc [ecx].refcnt
done:

The increment on [ecx].refcnt modifies garbage.

This can be done atomically (even with eventually consistent increment, don't need full sequential consistency here, you still need fully sequential consistent decrement).

Reply via email to