|  | @@ -60,17 +60,19 @@ class TagSaver final : public CompletionQueueTag {
 | 
	
		
			
				|  |  |    void* tag_;
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -}  // namespace
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  // Constantly watches channel connectivity status to reconnect a transiently
 | 
	
		
			
				|  |  |  // disconnected channel. This is a temporary work-around before we have retry
 | 
	
		
			
				|  |  |  // support.
 | 
	
		
			
				|  |  |  class ChannelConnectivityWatcher {
 | 
	
		
			
				|  |  |   public:
 | 
	
		
			
				|  |  | -  ChannelConnectivityWatcher() {
 | 
	
		
			
				|  |  | -    gpr_thd_options options = gpr_thd_options_default();
 | 
	
		
			
				|  |  | -    gpr_thd_options_set_joinable(&options);
 | 
	
		
			
				|  |  | -    gpr_thd_new(&thd_id_, &WatchStateChange, this, &options);
 | 
	
		
			
				|  |  | +  ChannelConnectivityWatcher() : thd_id_(0) {
 | 
	
		
			
				|  |  | +    const char* disabled_str =
 | 
	
		
			
				|  |  | +        std::getenv("GRPC_DISABLE_CHANNEL_CONNECTIVITY_WATCHER");
 | 
	
		
			
				|  |  | +    if (disabled_str == nullptr || strcmp(disabled_str, "1")) {
 | 
	
		
			
				|  |  | +      gpr_thd_options options = gpr_thd_options_default();
 | 
	
		
			
				|  |  | +      gpr_thd_options_set_joinable(&options);
 | 
	
		
			
				|  |  | +      gpr_thd_new(&thd_id_, &WatchStateChange, this, &options);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    ~ChannelConnectivityWatcher() {
 | 
	
	
		
			
				|  | @@ -114,9 +116,7 @@ class ChannelConnectivityWatcher {
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    void StartWatching(grpc_channel* channel) {
 | 
	
		
			
				|  |  | -    const char* disabled_str =
 | 
	
		
			
				|  |  | -        std::getenv("GRPC_DISABLE_CHANNEL_CONNECTIVITY_WATCHER");
 | 
	
		
			
				|  |  | -    if (disabled_str == nullptr || strcmp(disabled_str, "1")) {
 | 
	
		
			
				|  |  | +    if (thd_id_ != 0) {
 | 
	
		
			
				|  |  |        ChannelState* channel_state = new ChannelState(channel);
 | 
	
		
			
				|  |  |        // The first grpc_channel_watch_connectivity_state() is not used to
 | 
	
		
			
				|  |  |        // monitor the channel state change, but to hold a reference of the
 | 
	
	
		
			
				|  | @@ -146,7 +146,6 @@ class ChannelConnectivityWatcher {
 | 
	
		
			
				|  |  |    CompletionQueue shutdown_cq_;
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -namespace {
 | 
	
		
			
				|  |  |  void WatchStateChange(void* arg) {
 | 
	
		
			
				|  |  |    ChannelConnectivityWatcher* watcher =
 | 
	
		
			
				|  |  |        static_cast<ChannelConnectivityWatcher*>(arg);
 |