Skip to content

Commit 73d6895

Browse files
authored
Merge branch 'main' into fix/issue-1629-auth-emulator-log-spam
2 parents 112cf78 + 1871444 commit 73d6895

12 files changed

Lines changed: 25 additions & 32 deletions

File tree

database/src/desktop/core/info_listen_provider.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,13 @@
1919
#include "database/src/desktop/core/listen_provider.h"
2020
#include "database/src/desktop/core/tag.h"
2121
#include "database/src/desktop/util_desktop.h"
22-
#include "database/src/desktop/view/view.h"
2322

2423
namespace firebase {
2524
namespace database {
2625
namespace internal {
2726

2827
void InfoListenProvider::StartListening(const QuerySpec& query_spec,
29-
const Tag& tag, const View* view) {
28+
const Tag& tag) {
3029
repo_->scheduler().Schedule([this, query_spec]() {
3130
const Variant& value = VariantGetChild(info_data_, query_spec.path);
3231
if (!VariantIsEmpty(value)) {

database/src/desktop/core/info_listen_provider.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ class InfoListenProvider : public ListenProvider {
3434

3535
void set_sync_tree(SyncTree* sync_tree) { sync_tree_ = sync_tree; }
3636

37-
void StartListening(const QuerySpec& query_spec, const Tag& tag,
38-
const View* view) override;
37+
void StartListening(const QuerySpec& query_spec, const Tag& tag) override;
3938

4039
void StopListening(const QuerySpec& query_spec, const Tag& tag) override;
4140

database/src/desktop/core/listen_provider.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
#include "database/src/common/query_spec.h"
1919
#include "database/src/desktop/core/tag.h"
20-
#include "database/src/desktop/view/view.h"
2120

2221
namespace firebase {
2322
namespace database {
@@ -32,8 +31,7 @@ class ListenProvider {
3231
// Begin listening on a location with a set of parameters given by the
3332
// QuerySpec. While listening, the server will send down updates which will be
3433
// parsed and passed along to the SyncTree to be cached locally.
35-
virtual void StartListening(const QuerySpec& query_spec, const Tag& tag,
36-
const View* view) = 0;
34+
virtual void StartListening(const QuerySpec& query_spec, const Tag& tag) = 0;
3735

3836
// Stop listening on a location given by the QuerySpec.
3937
virtual void StopListening(const QuerySpec& query_spec, const Tag& tag) = 0;

database/src/desktop/core/sync_tree.cc

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,7 @@ std::vector<Event> SyncTree::AddEventRegistration(
207207
writes_cache, server_cache,
208208
persistence_manager_.get());
209209
if (!view_already_exists && !found_ancestor_default_view) {
210-
const View* view = sync_point->ViewForQuery(query_spec);
211-
SetupListener(query_spec, view);
210+
SetupListener(query_spec);
212211
}
213212
return true;
214213
});
@@ -547,11 +546,10 @@ static QuerySpec QuerySpecForListening(const QuerySpec& query_spec) {
547546
}
548547
}
549548

550-
void SyncTree::SetupListener(const QuerySpec& query_spec, const View* view) {
549+
void SyncTree::SetupListener(const QuerySpec& query_spec) {
551550
const Path& path = query_spec.path;
552551
const Tag& tag = TagForQuerySpec(query_spec);
553-
listen_provider_->StartListening(QuerySpecForListening(query_spec), tag,
554-
view);
552+
listen_provider_->StartListening(QuerySpecForListening(query_spec), tag);
555553

556554
Tree<SyncPoint>* subtree = sync_point_tree_.GetChild(path);
557555

@@ -663,7 +661,7 @@ std::vector<Event> SyncTree::RemoveEventRegistration(
663661
for (const View* view : new_views) {
664662
QuerySpec new_query = view->query_spec();
665663
listen_provider_->StartListening(QuerySpecForListening(new_query),
666-
TagForQuerySpec(new_query), view);
664+
TagForQuerySpec(new_query));
667665
}
668666
} else {
669667
// There's nothing below us, so nothing we need to start listening on

database/src/desktop/core/sync_tree.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ class SyncTree {
148148
private:
149149
// For a given new listen, manage the de-duplication of outstanding
150150
// subscriptions.
151-
void SetupListener(const QuerySpec& query_spec, const View* view);
151+
void SetupListener(const QuerySpec& query_spec);
152152

153153
// Recursive helper for ApplyOperationToSyncPoints
154154
std::vector<Event> ApplyOperationHelper(const Operation& operation,

database/src/desktop/core/web_socket_listen_provider.cc

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
#include "database/src/desktop/connection/persistent_connection.h"
2121
#include "database/src/desktop/core/listen_provider.h"
2222
#include "database/src/desktop/core/tag.h"
23-
#include "database/src/desktop/view/view.h"
2423

2524
namespace firebase {
2625
namespace database {
@@ -34,33 +33,30 @@ class WebSocketListenResponse : public connection::Response {
3433
WebSocketListenResponse(const Response::ResponseCallback& callback,
3534
const Repo::ThisRef& repo_ref, SyncTree* sync_tree,
3635
const QuerySpec& query_spec, const Tag& tag,
37-
const View* view, Logger* logger)
36+
Logger* logger)
3837
: connection::Response(callback),
3938
repo_ref_(repo_ref),
4039
sync_tree_(sync_tree),
4140
query_spec_(query_spec),
4241
tag_(tag),
43-
view_(view),
4442
logger_(logger) {}
4543

4644
Repo::ThisRef& repo_ref() { return repo_ref_; }
4745
SyncTree* sync_tree() { return sync_tree_; }
4846
const QuerySpec& query_spec() const { return query_spec_; }
4947
const Tag& tag() const { return tag_; }
50-
const View* view() const { return view_; }
5148
Logger* logger() { return logger_; }
5249

5350
private:
5451
Repo::ThisRef repo_ref_;
5552
SyncTree* sync_tree_;
5653
QuerySpec query_spec_;
5754
Tag tag_;
58-
const View* view_;
5955
Logger* logger_;
6056
};
6157

6258
void WebSocketListenProvider::StartListening(const QuerySpec& query_spec,
63-
const Tag& tag, const View* view) {
59+
const Tag& tag) {
6460
connection_->Listen(
6561
query_spec, tag,
6662
std::make_shared<WebSocketListenResponse>(
@@ -79,7 +75,7 @@ void WebSocketListenProvider::StartListening(const QuerySpec& query_spec,
7975

8076
std::vector<Event> events;
8177
if (!response->HasError()) {
82-
const QuerySpec& query_spec = response->view()->query_spec();
78+
const QuerySpec& query_spec = response->query_spec();
8379
const Tag& tag = response->tag();
8480
if (tag.has_value()) {
8581
events = response->sync_tree()->ApplyTaggedListenComplete(tag);
@@ -101,7 +97,7 @@ void WebSocketListenProvider::StartListening(const QuerySpec& query_spec,
10197
}
10298
repo->PostEvents(events);
10399
},
104-
repo_->this_ref(), sync_tree_, query_spec, tag, view, logger_));
100+
repo_->this_ref(), sync_tree_, query_spec, tag, logger_));
105101
}
106102

107103
void WebSocketListenProvider::StopListening(const QuerySpec& query_spec,

database/src/desktop/core/web_socket_listen_provider.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ class WebSocketListenProvider : public ListenProvider {
3939

4040
void set_sync_tree(SyncTree* sync_tree) { sync_tree_ = sync_tree; }
4141

42-
void StartListening(const QuerySpec& query_spec, const Tag& tag,
43-
const View* view) override;
42+
void StartListening(const QuerySpec& query_spec, const Tag& tag) override;
4443

4544
void StopListening(const QuerySpec& query_spec, const Tag& tag) override;
4645

database/tests/desktop/core/sync_point_spec_test.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,7 @@ class FakeListenProvider : public ListenProvider {
7777

7878
~FakeListenProvider() override {}
7979

80-
void StartListening(const QuerySpec& query_spec, const Tag& tag,
81-
const View* view) override {
80+
void StartListening(const QuerySpec& query_spec, const Tag& tag) override {
8281
const Path& path = query_spec.path;
8382
logger_->LogDebug(
8483
"Listening at %s for Tag %s", path.c_str(),

database/tests/desktop/test/mock_listen_provider.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ namespace internal {
2727
class MockListenProvider : public ListenProvider {
2828
public:
2929
MOCK_METHOD(void, StartListening,
30-
(const QuerySpec& query_spec, const Tag& tag, const View* view),
31-
(override));
30+
(const QuerySpec& query_spec, const Tag& tag), (override));
3231
MOCK_METHOD(void, StopListening,
3332
(const QuerySpec& query_spec, const Tag& tag), (override));
3433
};

release_build_files/readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,7 @@ code.
616616
### Upcoming
617617
- Changes
618618
- Auth (Desktop): Fixed log spam and high CPU utilization when offline by moving `USE_AUTH_EMULATOR` environment variable check to initialization and eliminating per-request logging (#1629).
619+
- Realtime Database (Desktop): Fixed an intermittent use-after-free crash (`ACCESS_VIOLATION`) when detaching a listener while a WebSocket listen response is pending.
619620

620621
### 13.10.0
621622
- Changes

0 commit comments

Comments
 (0)