@ -58,13 +58,13 @@ class ExternalConnectionAcceptorImpl;
/// \a Server instances.
class Server : public ServerInterface , private GrpcLibraryCodegen {
public :
~ Server ( ) override ;
~ Server ( ) ABSL_LOCKS_EXCLUDED ( mu_ ) override ;
/// Block until the server shuts down.
///
/// \warning The server must be either shutting down or some other thread must
/// call \a Shutdown for this function to ever return.
void Wait ( ) override ;
void Wait ( ) ABSL_LOCKS_EXCLUDED ( mu_ ) override ;
/// Global callbacks are a set of hooks that are called when server
/// events occur. \a SetGlobalCallbacks method is used to register
@ -286,13 +286,14 @@ class Server : public ServerInterface, private GrpcLibraryCodegen {
void PerformOpsOnCall ( internal : : CallOpSetInterface * ops ,
internal : : Call * call ) override ;
void ShutdownInternal ( gpr_timespec deadline ) override ;
void ShutdownInternal ( gpr_timespec deadline )
ABSL_LOCKS_EXCLUDED ( mu_ ) override ;
int max_receive_message_size ( ) const override {
return max_receive_message_size_ ;
}
CompletionQueue * CallbackCQ ( ) override ;
CompletionQueue * CallbackCQ ( ) ABSL_LOCKS_EXCLUDED ( mu_ ) override ;
ServerInitializer * initializer ( ) ;
@ -300,8 +301,8 @@ class Server : public ServerInterface, private GrpcLibraryCodegen {
// the ref count are the running state of the server (take a ref at start and
// drop it at shutdown) and each running callback RPC.
void Ref ( ) ;
void UnrefWithPossibleNotify ( ) /* LOCKS_EXCLUDED(mu_) */ ;
void UnrefAndWaitLocked ( ) /* EXCLUSIVE_LOCKS_REQUIRED(mu_) */ ;
void UnrefWithPossibleNotify ( ) ABSL_LOCKS_EXCLUDED ( mu_ ) ;
void UnrefAndWaitLocked ( ) ABSL_EXCLUSIVE_LOCKS_REQUIRED ( mu_ ) ;
std : : vector < std : : shared_ptr < internal : : ExternalConnectionAcceptorImpl > >
acceptors_ ;
@ -335,10 +336,11 @@ class Server : public ServerInterface, private GrpcLibraryCodegen {
// Server status
internal : : Mutex mu_ ;
bool started_ ;
bool shutdown_ ;
bool shutdown_notified_ ; // Was notify called on the shutdown_cv_
bool shutdown_ ABSL_GUARDED_BY ( mu_ ) ;
bool shutdown_notified_
ABSL_GUARDED_BY ( mu_ ) ; // Was notify called on the shutdown_cv_
internal : : CondVar shutdown_done_cv_ ;
bool shutdown_done_ = false ;
bool shutdown_done_ ABSL_GUARDED_BY ( mu_ ) = false ;
std : : atomic_int shutdown_refs_outstanding_ { 1 } ;
internal : : CondVar shutdown_cv_ ;
@ -378,7 +380,7 @@ class Server : public ServerInterface, private GrpcLibraryCodegen {
// with this server (if any). It is set on the first call to CallbackCQ().
// It is _not owned_ by the server; ownership belongs with its internal
// shutdown callback tag (invoked when the CQ is fully shutdown).
CompletionQueue * callback_cq_ /* GUARDED_BY(mu_) */ = nullptr ;
CompletionQueue * callback_cq_ ABSL_GUARDED_BY ( mu_ ) = nullptr ;
// List of CQs passed in by user that must be Shutdown only after Server is
// Shutdown. Even though this is only used with NDEBUG, instantiate it in all