diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2023-01-08 18:39:31 +0100 | 
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2023-01-31 21:27:00 +0100 | 
| commit | ed40a224e4256867d5f8c9f7c4c3ea998d4b88ce (patch) | |
| tree | 096723be59422b514a5a5bbf2ff2ee8eb1cdf704 /src | |
| parent | 10cb2e8956b47343666550dda55996cd7cfa6fbd (diff) | |
Test: fix shared state watcher reset
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.cpp | 19 | 
1 files changed, 16 insertions, 3 deletions
| diff --git a/src/main.cpp b/src/main.cpp index de4ffbc..12f46ac 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -323,8 +323,15 @@ void sharedStateGet(const vector<string> &)  void sharedStateWait(const vector<string> & args)  { -	static optional<Watched<vector<Ref>>> watched; -	watched = h->behavior().lens<vector<Ref>>().watch([args, watched = watched] (const vector<Ref> & refs) mutable { +	struct SharedStateWait +	{ +		mutex lock; +		bool done { false }; +		optional<Watched<vector<Ref>>> watched; +	}; +	auto watchedPtr = make_shared<SharedStateWait>(); + +	auto watched = h->behavior().lens<vector<Ref>>().watch([args, watchedPtr] (const vector<Ref> & refs) {  		vector<Stored<Object>> objs;  		objs.reserve(refs.size());  		for (const auto & r : refs) @@ -345,9 +352,15 @@ void sharedStateWait(const vector<string> & args)  				ss << " " << a;  			printLine(ss.str()); -			watched = std::nullopt; +			scoped_lock lock(watchedPtr->lock); +			watchedPtr->done = true; +			watchedPtr->watched = std::nullopt;  		}  	}); + +	scoped_lock lock(watchedPtr->lock); +	if (!watchedPtr->done) +		watchedPtr->watched = move(watched);  }  void watchLocalIdentity(const vector<string> &) |