AbdFatah / analytics-issues

Automatically exported from code.google.com/p/analytics-issues
0 stars 0 forks source link

ConcurrentModificationException #227

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
---------------------------------------------------------------------------
NOTE: This issue tracking system is for Google Analytics developer products
only.
If you are not a developer/programmer visit:
http://www.google.com/analytics/support.html
---------------------------------------------------------------------------
Name of affected component: Mobile Tracking

Name of related library and version, if applicable (e.g. Android, iOS,
Snippets, etc.): Android SDK V2

Issue summary:
Provide a brief summary of the issue you're experiencing.

Steps to reproduce issue:
1. call tracking methods like startActivity(...) or trackEvent(...)
2.
3.

Expected output:
What do you expect to see after performing the above steps?

- events will be tracked

Actual results:
What do you actually see after performing the above steps?

- detached java.util.ConcurrentModificationException

Notes:
Provide any additional information which might be useful here. Feel free to
attach screenshots or sample code which demonstrates the issue being
described.

java.util.ConcurrentModificationException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
    at android.app.ActivityThread.access$600(ActivityThread.java:128)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4517)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:792)
    at java.util.HashMap$EntryIterator.next(HashMap.java:829)
    at java.util.HashMap$EntryIterator.next(HashMap.java:827)
    at java.util.AbstractMap.putAll(AbstractMap.java:380)
    at java.util.HashMap.putAll(HashMap.java:508)
    at com.google.analytics.tracking.android.GoogleTracker$SimpleModel.getKeysAndValues(GoogleTracker.java:391)
    at com.google.analytics.tracking.android.GoogleTracker.send(GoogleTracker.java:73)
    at com.google.analytics.tracking.android.GoogleTracker.trackView(GoogleTracker.java:95)
    at com.google.analytics.tracking.android.GoogleTracker.trackView(GoogleTracker.java:102)
    at com.google.analytics.tracking.android.EasyTracker.activityStart(EasyTracker.java:354)

Original issue reported on code.google.com by thomas.r...@gmail.com on 21 Aug 2012 at 5:23

GoogleCodeExporter commented 9 years ago
I'm also affected by this issue. Problem occurs on Android 2.1 when the library 
sends data to the server and in the same time I track an event.

java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:200)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019) Caused by: 
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:796)
at java.util.HashMap$EntryIterator.next(HashMap.java:833)
at java.util.HashMap$EntryIterator.next(HashMap.java:831)
at java.util.AbstractMap.putAll(AbstractMap.java:381)
at java.util.HashMap.putAll(HashMap.java:512)
at 
com.google.analytics.tracking.android.GoogleTracker$SimpleModel.getKeysAndValues
(GoogleTracker.java:391)
at 
com.google.analytics.tracking.android.GoogleTracker.send(GoogleTracker.java:73)
at 
com.google.analytics.tracking.android.GoogleTracker.trackTiming(GoogleTracker.ja
va:145)
at 
pl.company.myapp.home.MainLongueAdapter$1.doInBackground(MainLongueAdapter.java:
73)
at 
pl.company.myapp.home.MainLongueAdapter$1.doInBackground(MainLongueAdapter.java:
1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
... 4 more

Original comment by pawel.ur...@gmail.com on 30 Aug 2012 at 10:29

GoogleCodeExporter commented 9 years ago
Started happening for us after upgrading to Android Analytics SDK v3 (with the 
Tag Manager)

Updated stack trace:

FATAL EXCEPTION: Thread-1366
java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:806)
    at java.util.HashMap$EntryIterator.next(HashMap.java:843)
    at java.util.HashMap$EntryIterator.next(HashMap.java:841)
    at java.util.AbstractMap.putAll(AbstractMap.java:380)
    at java.util.HashMap.putAll(HashMap.java:522)
    at com.google.analytics.tracking.android.Tracker.send(Tracker.java:106)
    at com.google.analytics.tracking.android.EasyTracker.send(EasyTracker.java:431)

Original comment by gaz...@gmail.com on 20 Oct 2013 at 9:09

GoogleCodeExporter commented 9 years ago
Seeing this as well w/ GA 3:

java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:792)
    at java.util.HashMap$EntryIterator.next(HashMap.java:829)
    at java.util.HashMap$EntryIterator.next(HashMap.java:827)
    at java.util.AbstractMap.putAll(AbstractMap.java:380)
    at java.util.HashMap.putAll(HashMap.java:508)
    at com.google.analytics.tracking.android.Tracker.send(Tracker.java:106)

Original comment by m...@zavislak.net on 22 Oct 2013 at 5:44

GoogleCodeExporter commented 9 years ago
In GA 3.01 (observed twice on Android 4.2.2):

java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:792)
at java.util.HashMap$EntryIterator.next(HashMap.java:829)
at java.util.HashMap$EntryIterator.next(HashMap.java:827)
at java.util.AbstractMap.putAll(AbstractMap.java:380)
at java.util.HashMap.putAll(HashMap.java:508)
at com.google.analytics.tracking.android.Tracker.send(SourceFile:106)
at com.google.analytics.tracking.android.EasyTracker.send(SourceFile:431)

I am calling "EasyTracker.send" from an AsyncTask thread while the app is 
starting up and the error occurs on that thread. It is quite likely that there 
are concurrent "EasyTracker" calls on the main/UI thread.

My guess is that "Tracker.set" is being called on the main thread to set some 
session scope custom dimensions while "Tracker.send" is called concurrently on 
the AsyncTask thread. The latter "Tracker.send" merges (via the "putAll" call) 
the parameter Map given to "send" with the parameter Map of the Tracker. 
However, while "putAll" iterates over the Tracker's parameter Map, the UI 
thread's call to "Tracker.set" is issued and that causes the concurrent 
modification exception. Of course, the problem is intermittent and not easy to 
reproduce.

The only mention of concurrency issues in all the GA documentation that I can 
find is that a similar exception was fixed in the GoogleTracker class for 
2.0beta3. There are no warnings about concurrent use of EasyTracker or any 
notes about thread-safety in the GA 3.01 documentation.

While awaiting a fix (or even just documentation) I will have to put a wrapper 
around my EasyTracker calls to synchronize access to the EasyTracker instance.

Original comment by damow...@gmail.com on 31 Oct 2013 at 6:08

GoogleCodeExporter commented 9 years ago

Original comment by awa...@google.com on 7 Nov 2013 at 9:15

GoogleCodeExporter commented 9 years ago
This is fixed in v4:
https://developers.google.com/analytics/devguides/collection/android/v4

Original comment by pfrise...@google.com on 10 Oct 2014 at 6:52

GoogleCodeExporter commented 9 years ago
I just had this crash with v4:

Caused by: java.util.ConcurrentModificationException
    at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787)
    at java.util.HashMap$EntryIterator.next(HashMap.java:824)
    at java.util.HashMap$EntryIterator.next(HashMap.java:822)
    at java.util.AbstractMap.putAll(AbstractMap.java:380)
    at java.util.HashMap.putAll(HashMap.java:503)
    at com.google.android.gms.analytics.Tracker.send(Unknown Source)
    at org.ligi.passandroid.AnalyticsTracker.trackEvent(AnalyticsTracker.java:61)
    at org.ligi.passandroid.ui.InputStreamProvider.fromURI(InputStreamProvider.java:27)
    at org.ligi.passandroid.ui.PassImportActivity$ImportAndShowAsyncTask.doInBackground(PassImportActivity.java:42)
    at org.ligi.passandroid.ui.PassImportActivity$ImportAndShowAsyncTask.doInBackground(PassImportActivity.java:25)
    at android.os.AsyncTask$2.call(AsyncTask.java:288)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)

Original comment by marcus.b...@ecabo.de on 25 Mar 2015 at 1:48

GoogleCodeExporter commented 9 years ago
I am using API V4 and occasionally i am getting the same exception:

java.lang.RuntimeException: Unable to start activity : 
java.util.ConcurrentModificationException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
            at android.app.ActivityThread.access$800(ActivityThread.java:148)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5312)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
     Caused by: java.util.ConcurrentModificationException
            at java.util.HashMap$HashIterator.nextEntry(HashMap.java:787)
            at java.util.HashMap$KeyIterator.next(HashMap.java:814)
            at com.google.android.gms.analytics.GoogleAnalytics.g(Unknown Source)
            at com.google.android.gms.analytics.GoogleAnalytics$b.onActivityStarted(Unknown Source)
            at android.app.Application.dispatchActivityStarted(Application.java:199)
            at android.app.Activity.onStart(Activity.java:1180)
            at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:536)
            at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1243)
            at android.app.Activity.performStart(Activity.java:5969)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2277)
            at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
            at 
android.app.ActivityThread.access$800(ActivityThread.java:148)
            at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at 
android.app.ActivityThread.main(ActivityThread.java:5312)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
            at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)

Original comment by mudit.a...@gmail.com on 5 May 2015 at 9:37