@@ -33,6 +33,7 @@ public final class NetworkBreadcrumbsIntegration implements Integration, Closeab
33
33
private final @ NotNull Context context ;
34
34
private final @ NotNull BuildInfoProvider buildInfoProvider ;
35
35
private final @ NotNull ILogger logger ;
36
+ private final @ NotNull Object lock = new Object ();
36
37
private volatile boolean isClosed ;
37
38
private @ Nullable SentryOptions options ;
38
39
@@ -73,9 +74,6 @@ public void register(final @NotNull IHub hub, final @NotNull SentryOptions optio
73
74
return ;
74
75
}
75
76
76
- networkCallback =
77
- new NetworkBreadcrumbsNetworkCallback (hub , buildInfoProvider , options .getDateProvider ());
78
-
79
77
try {
80
78
options
81
79
.getExecutorService ()
@@ -84,21 +82,26 @@ public void register(final @NotNull IHub hub, final @NotNull SentryOptions optio
84
82
@ Override
85
83
public void run () {
86
84
// in case integration is closed before the task is executed, simply return
87
- final @ Nullable NetworkBreadcrumbsNetworkCallback callback = networkCallback ;
88
- if (isClosed || callback == null ) {
89
- networkCallback = null ;
85
+ if (isClosed ) {
90
86
return ;
91
87
}
92
88
93
- final boolean registered =
94
- AndroidConnectionStatusProvider .registerNetworkCallback (
95
- context , logger , buildInfoProvider , callback );
96
- if (registered ) {
97
- logger .log (SentryLevel .DEBUG , "NetworkBreadcrumbsIntegration installed." );
98
- addIntegrationToSdkVersion (getClass ());
99
- } else {
100
- logger .log (SentryLevel .DEBUG , "NetworkBreadcrumbsIntegration not installed." );
101
- // The specific error is logged by AndroidConnectionStatusProvider
89
+ synchronized (lock ) {
90
+ networkCallback =
91
+ new NetworkBreadcrumbsNetworkCallback (
92
+ hub , buildInfoProvider , options .getDateProvider ());
93
+
94
+ final boolean registered =
95
+ AndroidConnectionStatusProvider .registerNetworkCallback (
96
+ context , logger , buildInfoProvider , networkCallback );
97
+ if (registered ) {
98
+ logger .log (SentryLevel .DEBUG , "NetworkBreadcrumbsIntegration installed." );
99
+ addIntegrationToSdkVersion (getClass ());
100
+ } else {
101
+ logger .log (
102
+ SentryLevel .DEBUG , "NetworkBreadcrumbsIntegration not installed." );
103
+ // The specific error is logged by AndroidConnectionStatusProvider
104
+ }
102
105
}
103
106
}
104
107
});
@@ -117,13 +120,14 @@ public void close() throws IOException {
117
120
.getExecutorService ()
118
121
.submit (
119
122
() -> {
120
- final @ Nullable NetworkBreadcrumbsNetworkCallback callback = networkCallback ;
121
- if (callback != null ) {
122
- AndroidConnectionStatusProvider .unregisterNetworkCallback (
123
- context , logger , buildInfoProvider , callback );
124
- logger .log (SentryLevel .DEBUG , "NetworkBreadcrumbsIntegration removed." );
123
+ synchronized (lock ) {
124
+ if (networkCallback != null ) {
125
+ AndroidConnectionStatusProvider .unregisterNetworkCallback (
126
+ context , logger , buildInfoProvider , networkCallback );
127
+ logger .log (SentryLevel .DEBUG , "NetworkBreadcrumbsIntegration removed." );
128
+ }
129
+ networkCallback = null ;
125
130
}
126
- networkCallback = null ;
127
131
});
128
132
} catch (Throwable t ) {
129
133
logger .log (SentryLevel .ERROR , "Error submitting NetworkBreadcrumbsIntegration task." , t );
0 commit comments