Yep, first clear THREAD_FLAGS_SYSCALL, then check whether it is set.
That would explain why syscall restarts were broken. In fact there's no reason to check the flag at all, since we know we set it. ftp appears to work again. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24918 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -130,13 +130,12 @@ struct SyscallRestartWrapper {
|
||||
|
||||
~SyscallRestartWrapper()
|
||||
{
|
||||
atomic_and(&fThread->flags, ~THREAD_FLAGS_SYSCALL);
|
||||
|
||||
if (fResult == B_INTERRUPTED) {
|
||||
// interrupted -- set flag for syscall restart
|
||||
if ((fThread->flags & THREAD_FLAGS_SYSCALL) != 0)
|
||||
atomic_or(&fThread->flags, THREAD_FLAGS_RESTART_SYSCALL);
|
||||
atomic_or(&fThread->flags, THREAD_FLAGS_RESTART_SYSCALL);
|
||||
}
|
||||
|
||||
atomic_and(&fThread->flags, ~THREAD_FLAGS_SYSCALL);
|
||||
}
|
||||
|
||||
SyscallRestartWrapper<Type>& operator=(const Type& other)
|
||||
|
||||
Reference in New Issue
Block a user