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 );
|
reset_event( event );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fatal_protocol_error( current, "event_op: invalid operation %d\n", req->op );
|
set_error( STATUS_INVALID_PARAMETER );
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
release_object( event );
|
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) process->handles = alloc_handle_table( process, 0 );
|
||||||
if (!process->handles)
|
if (!process->handles)
|
||||||
{
|
{
|
||||||
fatal_protocol_error( thread, "Failed to allocate handle table\n" );
|
set_error( STATUS_NO_MEMORY );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -895,7 +895,7 @@ DECL_HANDLER(init_process_done)
|
||||||
|
|
||||||
if (is_process_init_done(process))
|
if (is_process_init_done(process))
|
||||||
{
|
{
|
||||||
fatal_protocol_error( current, "init_process_done: called twice\n" );
|
set_error( STATUS_INVALID_PARAMETER );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(dll = find_process_dll( process, req->module )))
|
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 );
|
if (debug_level) trace_reply( req, &reply );
|
||||||
send_reply( &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;
|
current = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -842,26 +842,22 @@ DECL_HANDLER(init_thread)
|
||||||
int reply_fd = thread_get_inflight_fd( current, req->reply_fd );
|
int reply_fd = thread_get_inflight_fd( current, req->reply_fd );
|
||||||
int wait_fd = thread_get_inflight_fd( current, req->wait_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" );
|
set_error( STATUS_INVALID_PARAMETER );
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
if (reply_fd == -1 || fcntl( reply_fd, F_SETFL, O_NONBLOCK ) == -1)
|
|
||||||
{
|
|
||||||
fatal_protocol_error( current, "bad reply fd\n" );
|
|
||||||
goto error;
|
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)
|
if (wait_fd == -1)
|
||||||
{
|
{
|
||||||
fatal_protocol_error( current, "bad wait fd\n" );
|
set_error( STATUS_TOO_MANY_OPENED_FILES ); /* most likely reason */
|
||||||
goto error;
|
return;
|
||||||
}
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
if (!(current->wait_fd = create_anonymous_fd( &thread_fd_ops, wait_fd, ¤t->obj )))
|
if (!(current->wait_fd = create_anonymous_fd( &thread_fd_ops, wait_fd, ¤t->obj )))
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -3980,6 +3980,7 @@ static const struct
|
||||||
{ "SHARING_VIOLATION", STATUS_SHARING_VIOLATION },
|
{ "SHARING_VIOLATION", STATUS_SHARING_VIOLATION },
|
||||||
{ "SUSPEND_COUNT_EXCEEDED", STATUS_SUSPEND_COUNT_EXCEEDED },
|
{ "SUSPEND_COUNT_EXCEEDED", STATUS_SUSPEND_COUNT_EXCEEDED },
|
||||||
{ "TIMEOUT", STATUS_TIMEOUT },
|
{ "TIMEOUT", STATUS_TIMEOUT },
|
||||||
|
{ "TOO_MANY_OPENED_FILES", STATUS_TOO_MANY_OPENED_FILES },
|
||||||
{ "UNSUCCESSFUL", STATUS_UNSUCCESSFUL },
|
{ "UNSUCCESSFUL", STATUS_UNSUCCESSFUL },
|
||||||
{ "VOLUME_DISMOUNTED", STATUS_VOLUME_DISMOUNTED },
|
{ "VOLUME_DISMOUNTED", STATUS_VOLUME_DISMOUNTED },
|
||||||
{ "WAS_LOCKED", STATUS_WAS_LOCKED },
|
{ "WAS_LOCKED", STATUS_WAS_LOCKED },
|
||||||
|
|
Loading…
Reference in New Issue