server: Don't report a fatal protocol error for things that we can recover from.
This commit is contained in:
parent
3575918411
commit
5558652ea3
|
@ -215,7 +215,8 @@ DECL_HANDLER(event_op)
|
|||
reset_event( event );
|
||||
break;
|
||||
default:
|
||||
fatal_protocol_error( current, "event_op: invalid operation %d\n", req->op );
|
||||
set_error( STATUS_INVALID_PARAMETER );
|
||||
break;
|
||||
}
|
||||
release_object( event );
|
||||
}
|
||||
|
|
|
@ -335,7 +335,7 @@ size_t init_process( struct thread *thread )
|
|||
if (!process->handles) process->handles = alloc_handle_table( process, 0 );
|
||||
if (!process->handles)
|
||||
{
|
||||
fatal_protocol_error( thread, "Failed to allocate handle table\n" );
|
||||
set_error( STATUS_NO_MEMORY );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -895,7 +895,7 @@ DECL_HANDLER(init_process_done)
|
|||
|
||||
if (is_process_init_done(process))
|
||||
{
|
||||
fatal_protocol_error( current, "init_process_done: called twice\n" );
|
||||
set_error( STATUS_INVALID_PARAMETER );
|
||||
return;
|
||||
}
|
||||
if (!(dll = find_process_dll( process, req->module )))
|
||||
|
|
|
@ -293,7 +293,11 @@ static void call_req_handler( struct thread *thread )
|
|||
if (debug_level) trace_reply( req, &reply );
|
||||
send_reply( &reply );
|
||||
}
|
||||
else fatal_protocol_error( current, "no reply fd for request %d\n", req );
|
||||
else
|
||||
{
|
||||
current->exit_code = 1;
|
||||
kill_thread( current, 1 ); /* no way to continue without reply fd */
|
||||
}
|
||||
}
|
||||
current = NULL;
|
||||
}
|
||||
|
|
|
@ -842,26 +842,22 @@ DECL_HANDLER(init_thread)
|
|||
int reply_fd = thread_get_inflight_fd( current, req->reply_fd );
|
||||
int wait_fd = thread_get_inflight_fd( current, req->wait_fd );
|
||||
|
||||
if (current->unix_pid != -1)
|
||||
if (current->reply_fd) /* already initialised */
|
||||
{
|
||||
fatal_protocol_error( current, "init_thread: already running\n" );
|
||||
goto error;
|
||||
}
|
||||
if (reply_fd == -1 || fcntl( reply_fd, F_SETFL, O_NONBLOCK ) == -1)
|
||||
{
|
||||
fatal_protocol_error( current, "bad reply fd\n" );
|
||||
set_error( STATUS_INVALID_PARAMETER );
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (reply_fd == -1 || fcntl( reply_fd, F_SETFL, O_NONBLOCK ) == -1) goto error;
|
||||
|
||||
current->reply_fd = create_anonymous_fd( &thread_fd_ops, reply_fd, ¤t->obj );
|
||||
reply_fd = -1;
|
||||
if (!current->reply_fd) goto error;
|
||||
|
||||
if (wait_fd == -1)
|
||||
{
|
||||
fatal_protocol_error( current, "bad wait fd\n" );
|
||||
goto error;
|
||||
}
|
||||
if (!(current->reply_fd = create_anonymous_fd( &thread_fd_ops, reply_fd, ¤t->obj )))
|
||||
{
|
||||
reply_fd = -1;
|
||||
fatal_protocol_error( current, "could not allocate reply fd\n" );
|
||||
goto error;
|
||||
set_error( STATUS_TOO_MANY_OPENED_FILES ); /* most likely reason */
|
||||
return;
|
||||
}
|
||||
if (!(current->wait_fd = create_anonymous_fd( &thread_fd_ops, wait_fd, ¤t->obj )))
|
||||
return;
|
||||
|
|
|
@ -3980,6 +3980,7 @@ static const struct
|
|||
{ "SHARING_VIOLATION", STATUS_SHARING_VIOLATION },
|
||||
{ "SUSPEND_COUNT_EXCEEDED", STATUS_SUSPEND_COUNT_EXCEEDED },
|
||||
{ "TIMEOUT", STATUS_TIMEOUT },
|
||||
{ "TOO_MANY_OPENED_FILES", STATUS_TOO_MANY_OPENED_FILES },
|
||||
{ "UNSUCCESSFUL", STATUS_UNSUCCESSFUL },
|
||||
{ "VOLUME_DISMOUNTED", STATUS_VOLUME_DISMOUNTED },
|
||||
{ "WAS_LOCKED", STATUS_WAS_LOCKED },
|
||||
|
|
Loading…
Reference in New Issue