88f9ec313f
This will stop instances of the following from occuring in the logs on SMS migration: W/SQLiteCompiledSql: Releasing statement in a finalizer. Please ensure that you explicitly call close() on your cursor: INSERT INTO sms (address, person, date_sent, date, protocol, read, status, type, reply_path_present, net.sqlcipher.database.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here at net.sqlcipher.database.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:62) at net.sqlcipher.database.SQLiteProgram.<init>(SQLiteProgram.java:109) at net.sqlcipher.database.SQLiteStatement.<init>(SQLiteStatement.java:39) at net.sqlcipher.database.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1647) at org.thoughtcrime.securesms.database.SmsDatabase.createInsertStatement(SmsDatabase.java:767) at org.thoughtcrime.securesms.database.SmsMigrator.migrateConversation(SmsMigrator.java:166) at org.thoughtcrime.securesms.database.SmsMigrator.migrateDatabase(SmsMigrator.java:210) at org.thoughtcrime.securesms.service.ApplicationMigrationService$ImportRunnable.run(ApplicationMigrationService.java:159) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764) We aren't closing Statement objects before the finalizer on those objects runs. When the GC runs, we'll get warnings like the above which alert us to the fact that these objects are being automatically closed for us in the finalizer, but that this is suboptimal behavior. If we leave too many Statement (or Cursor) objects to be closed in their finalizers, when the GC runs, it'll take longer than 10 seconds to close them all and Android will kill the app. This 10 second limit is hardcoded and we can only try to avoid it. A crash will look like: java.util.concurrent.TimeoutException: net.sqlcipher.database.SQLiteCompiledSql.finalize() timed out after 10 seconds at java.lang.Object.wait(Native Method) at java.lang.Thread.parkFor$(Thread.java:1220) at sun.misc.Unsafe.park(Unsafe.java:299) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:810) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:844) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1173) at java.util.concurrent.locks.ReentrantLock$FairSync.lock(ReentrantLock.java:196) at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:257) at net.sqlcipher.database.SQLiteDatabase.lock(SQLiteDatabase.java:553) at net.sqlcipher.database.SQLiteCompiledSql.releaseSqlStatement(SQLiteCompiledSql.java:106) at net.sqlcipher.database.SQLiteCompiledSql.finalize(SQLiteCompiledSql.java:152) at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:202) at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:185) at java.lang.Thread.run(Thread.java:818) I was able to replicate the above crash consistently on a Samsung Galaxy S7 edge when importing well over 100k SMS messages. But as soon as I attached a debugger the crash did not persist. I assume this is because of some VM-level interactions between the two and did not investigate further after fixing it. I do not have access to the stack trace for issue #7953 but this could potentially resolve it. The crash is identical to that in #7477 but this patch is for SMS migration not restoring from a backup. I was not able to replicate the crash on restoring a >100k message backup. |
||
---|---|---|
.github | ||
.tx | ||
apkdiff | ||
apntool | ||
artwork | ||
assets | ||
buildSrc | ||
gradle/wrapper | ||
jni | ||
libs | ||
protobuf | ||
res | ||
src/org/thoughtcrime/securesms | ||
test | ||
website | ||
.gitattributes | ||
.gitignore | ||
AndroidManifest.xml | ||
build.gradle | ||
BUILDING.md | ||
CONTRIBUTING.md | ||
Dockerfile | ||
gradle.properties | ||
gradlew | ||
gradlew.bat | ||
LICENSE | ||
NOTICE | ||
pkcs11.config | ||
proguard-appcompat-v7.pro | ||
proguard-automation.pro | ||
proguard-dagger.pro | ||
proguard-ez-vcard.pro | ||
proguard-firebase-messaging.pro | ||
proguard-glide.pro | ||
proguard-google-play-services.pro | ||
proguard-jackson.pro | ||
proguard-klinker.pro | ||
proguard-okhttp.pro | ||
proguard-retrofit.pro | ||
proguard-retrolambda.pro | ||
proguard-rounded-image-view.pro | ||
proguard-shortcutbadger.pro | ||
proguard-spongycastle.pro | ||
proguard-sqlite.pro | ||
proguard-square-okhttp.pro | ||
proguard-square-okio.pro | ||
proguard-webrtc.pro | ||
proguard.cfg | ||
README.md |
Signal Android
Signal is a messaging app for simple private communication with friends.
Signal uses your phone's data connection (WiFi/3G/4G) to communicate securely, optionally supports plain SMS/MMS to function as a unified messenger, and can also encrypt the stored messages on your phone.
Currently available on the Play store.
Contributing Bug reports
We use GitHub for bug tracking. Please search the existing issues for your bug and create a new one if the issue is not yet tracked!
https://github.com/signalapp/Signal-Android/issues
Joining the Beta
Want to live life on the bleeding edge and help out with testing?
You can subscribe to Signal Android Beta releases here: https://play.google.com/apps/testing/org.thoughtcrime.securesms
If you're interested in a life of peace and tranquility, stick with the standard releases.
Contributing Translations
Interested in helping to translate Signal? Contribute here:
https://www.transifex.com/projects/p/signal-android/
Contributing Code
Instructions on how to setup your development environment and build Signal can be found in BUILDING.md.
If you're new to the Signal codebase, we recommend going through our issues and picking out a simple bug to fix (check the "easy" label in our issues) in order to get yourself familiar. Also please have a look at the CONTRIBUTING.md, that might answer some of your questions.
For larger changes and feature ideas, we ask that you propose it on the unofficial Community Forum for a high-level discussion with the wider community before implementation.
Contributing Ideas
Have something you want to say about Open Whisper Systems projects or want to be part of the conversation? Get involved in the community forum.
Help
Support
For troubleshooting and questions, please visit our support center!
Documentation
Looking for documentation? Check out the wiki!
https://github.com/signalapp/Signal-Android/wiki
Legal things
Cryptography Notice
This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See http://www.wassenaar.org/ for more information.
The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.
License
Copyright 2011 Whisper Systems
Copyright 2013-2017 Open Whisper Systems
Licensed under the GPLv3: http://www.gnu.org/licenses/gpl-3.0.html
Google Play and the Google Play logo are trademarks of Google Inc.