Commit 5558652e authored by Alexandre Julliard's avatar Alexandre Julliard

server: Don't report a fatal protocol error for things that we can recover from.

parent 35759184
......@@ -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, &current->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, &current->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, &current->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 },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment