diff -r 73ea206103e6 -r 43365a9b78a3 kernel/eka/euser/epoc/win32/uc_utl.cpp --- a/kernel/eka/euser/epoc/win32/uc_utl.cpp Wed Jun 23 19:44:53 2010 +0300 +++ b/kernel/eka/euser/epoc/win32/uc_utl.cpp Tue Jul 06 15:50:07 2010 +0300 @@ -114,6 +114,21 @@ RSemaphore::Wait(); } +EXPORT_C __NAKED__ TInt RFastLock::Poll() + { + _asm xor eax, eax + _asm xor edx, edx + _asm dec edx + + /* if ([ecx+4]==0) { [ecx+4]=-1; ZF=1;} else {eax=[ecx+4]; ZF=0;} */ + _asm lock cmpxchg [ecx+4], edx + _asm jz short fastlock_poll_done + _asm mov eax, -33 + + fastlock_poll_done: + _asm ret + } + EXPORT_C void RFastLock::Signal() { if (InterlockedIncrement((LPLONG)&iCount) < 0)