UPDATE:
The device appears to be grey import from Germany. Only the German firmware has this problem. It is now on it's way to the service center for a firmware upgrade. Fingers crossed & kudos for Samsung Belgium for investigating this issue, whilst it should be dealt with by Samsung Germany.
UPDATE2:
Latest firmware does not fix this problem. It occurs less than in the beginning, also probably because wifi is now off most of the time.
UPDATE3:
Firmware installed on 11/11/2011 with build number GINGERBREAD.XXKPS fixes the problems. At last! Make sure to upgrade your firmware using Samsung Kies.
I'm writing this up so other people facing the same issue with the Samsung Galaxy Gio phone can find this information via Google.
I bought a Galaxy Gio for my wife. The Gio is just released by Samsung, so it's in it's first firmware version. There is a bug in the firmware which makes te device unusable. In this post, I try to diagnose this bug.
Symptoms
When you're surfing the web, refreshing email (or have email pushed to you in the background) all of a sudden your phone freezes, vibrates once, pauzes for 2 seconds and then vibrates 3 times. Depending on how much luck you have, the phone closes the application that was accessing the internet or it keeps doing the vibrate thing whilst the screen and all buttons are frozen until eternity. In that case, the only solution is to hold down the power button during 5 seconds to power off and reboot the phone (or to remove the battery).
This happens every 1-30 minutes that you're actively using the phone. The less you use the internet, the less the crash occurs. The more stable your connection is, the less the crash occurs.
Tests performed
To check where the problem lies, I restored the phone to factory settings. It would not crash, no matter what I did if I didn't configure an internet setting.
Next, I configured a Wifi connection and started browsing. Within 1 minute the browser crashed.
As a third step, I restored the phone to factory settings again and configured a gprs access point. Within 1 minute of browsing the phone crashed. In other tries, it took 10 minutes.
As a fourth and fifth test I repeated the above tests (with GPRS and WiFi) but I configured a Google account, opened up the gMail application and clicked on 'refresh'. On both instances, the phone crashed on some occasions.
I noticed that when I introduced instability in the connection (disconnect WiFi router during test, move to location with bad GPRS reception during test) that crashes occured far more frequently
Log file analysis
An analysis of the logfiles learned that a SIGSEGV event is thrown by both the browser and gMail (and probably other apps that use internet if I would have installed and tested them. I've had the same thing happening with the weather applet and even the clock, which probably syncs it's setting to the linked Google account).
The SIGSEGV event means that the application is adressing memory that it has no (longer) access to. It always occurs after the following lines in the logfiles:
:06:12.732 I/ActivityThread( 1520): queueIdle
:06:12.742 V/ActivityThread( 1520): Reporting idle of ActivityRecord{4a301bd8 token=android.os.BinderProxy@4a3012a0 {com.android.browser/com.android.browser.BrowserActivity}} finished=false
:06:12.742 W/ActivityNative( 1520): send ACTIVITY_IDLE_TRANSACTION
:06:12.742 W/ActivityNative( 172): RCV ACTIVITY_IDLE_TRANSACTION
:06:14.002 I/browser ( 1520): Console: [object Object] http://www.google.com/m?client=ms-android-samsung&source=android-home:451
:06:14.232 I/DEBUG ( 1441): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
:06:14.232 I/DEBUG ( 1441): Build fingerprint: 'samsung/GT-S5660/GT-S5660/GT-S5660:2.2.1/FROYO/XXKC4:user/release-keys'
:06:14.232 I/DEBUG ( 1441): pid: 1520, tid: 1530 >>> com.android.browser <<<
:06:14.232 I/DEBUG ( 1441): signal 11 (SIGSEGV), fault addr 41f80020
It looks like the application (in this case, the browser) has requested data from the internet. This request is terminated by the system due to a change in connection state (or packet loss or some other hick-up in the connection). The application keeps a reference/pointer to the data it requested and thinks that the data has arrived and wants to access it. However, this pointer is invalid since the system already cleaned up the connection. Possible causes could be:
- the system doesn't notify the application that the request is killed
- the application doesn't update it's state correctly (which is less likely, since several applications exhibit the same behavior)
Disclaimer: I have no knowledge of Android or Samsung firmware, this is just deduction based upon general sw engineering knowledge and the data in the log file. This diagnosis can just as well be wrong.
Conclusion
Samsung left a huge bug in the firmware related to data connectivity. I can not understand that this firmware actually shipped. Don't they even do basic testing? I gave the phone to my wife and she told me that it's broken within 10 minutes of receiving it. Shouldn't a Samsung engineer have at least the same basic testing skills than an average consumer?
Samsung, solve this one very quickly or be prepared to see enormous return rates on the Galaxy Gio!
(reactions from Samsung and updates will be posted in this same blogpost)