Signal-iOS icon indicating copy to clipboard operation
Signal-iOS copied to clipboard

Signal crash, after no more free space "Problem Retrieving Data"

Open Nerodelo opened this issue 1 year ago • 8 comments

Hi I got same issue as lot of people after no more free space on my iPhone, I make more space but Signal app still crash

My iPhone was running out of space and I opened signal. Now after freeing up space the Signal app says "Problem Retrieving Data" and immediately crashes when I click continue. Is there no way to recover the data?

I can't sent report with the tap 8 times, because app crash before the report option, please fix it I don't want to lose my personal data

Bug description

When I start Signal, I get the "Problem Retrieving Data" screen. After confirming it, the all displays that it is now recovering the database but crashes after 10 seconds. There is no way to skip the recovery or retrieve debug logs.

It might be the case that this was triggered by a full device storage, but now there is >1GB space free.

Steps to reproduce

Start app Immediately get "Problem Retrieving Data" screen Click continue For 10 seconds, get recovery screen Actual result: Describe here what happens after you run the steps above (i.e. the buggy behaviour)

App crashes without Error message or debug log No access to existing or new messages, not able to send messages Expected result: Describe here what should happen after you run the steps above (i.e. what would be the correct behaviour)

Successful Recovery Able to start Signal and access messages

Device info

Device: iPhone 12 Pro

iOS version: 17.3.1

Signal version: 7.11

Link to debug log

Log from app not available Log from iOS can't be send to signal because app crash before

Nerodelo avatar May 31 '24 14:05 Nerodelo

I have encountered the same issue. My iPhone storage was full and I opened Signal and it crashed. Next time I opened Signal, it gave me the same error as described above ("Problem Retrieving Data"). When trying to retrieve data, it reaches 57% and then tells me that data cannot be retrieved and I am supposed to reset Signal completely which I do not want to do as I do not want to lose all my messages and media data. Interestingly enough I am still receiving new messages and they pop up on my home screen but I have no way to access them as I run into "problem retrieving data" again. Any new insights what I can do? I have also posted this in #5811

c-mar-coder avatar Jun 28 '24 19:06 c-mar-coder

exact same problem here

benjamindahl avatar Jul 10 '24 18:07 benjamindahl

exact same problem here

did you find a solution?

Lionward avatar Aug 02 '24 18:08 Lionward

any update?

dronox avatar Oct 08 '24 19:10 dronox

Same here. The phone never quite reached 100% full as far as I can tell, but it's possible that the OS prevented Signal from eg. creating a temporary file. My phone's database is c. 3.5GB and storage may have gotten as low as 2GB free, in case this is a clue.

Now the situation seems bad, because the app won't start, instead complaining that the database can't be opened (presumably corrupted). I would just uninstall and reinstall onto the phone and then sync from my latest copy of application data on my laptop's Signal Desktop, but my memory of doing something like this in the past is that Signal is not very flexible about how it syncs and which device has main control of the account. I don't think I can transfer control of my account from the laptop back to a freshly-installed phone, instead it has to be passed from one phone installation to the next, which is now impossible.

I've tried to send the crash logs, but when I give it permission to send, the iOS app complains that it can't find the logs.

Let me know if there are steps I can take to help debug the issue—for example, I would be able to dump my application data locally and examine the files if there are specific things I should look for.

adamwight avatar Oct 13 '24 15:10 adamwight

Signal is not very flexible about how it syncs and which device has main control of the account.

Confirmed my suspicions by reading some official docs on how to transfer app data: seems that a clean install on the phone will indeed break my chain of trust or whatever the limitation is, because this would almost certainly match the "cleared your phone" case for not being able to restore messages or transfer the account.

adamwight avatar Oct 13 '24 15:10 adamwight

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

stale[bot] avatar Feb 07 '25 03:02 stale[bot]

I can confirm that the problem has been here since last year, and no update has solved it.

Nerodelo avatar Feb 27 '25 11:02 Nerodelo

I have emailed the team, and was assured the team are working on it (last year). It's really frustrating since there is no way to export/backup messages, and I've been using signal for over five years and have a 25GB+ database. While I do have a desktop app linked, it's now telling me to login using my phone (which I still can't because the recovery is still failing).

alasiax avatar Apr 07 '25 11:04 alasiax

My friend got the same issue actually. I believe the problem is that the database becomes corrupted when signal tries to write to it and runs out of storage space. Then even after making more space, the database remains corrupted. You can fix the issue by deleting the app and all of its data and then installing it again.

Here is the crash zip:

3f03a0cff4e9b0b08aa723ea918f35897bcef0057585733f5fed59a84e0fa96d.zip

Interesting stack trace:

2025/07/04 03:36:48:667  ERR❤️ [NotificationService.swift:123 _didReceive(_:logger:)]: Couldn't load database: SQLite error 1: Optional("SQL logic error") (extended result code: 1)
2025/07/04 03:37:06:019  INF💛 [rust/bridge/ffi/src/logging.rs:103]: Initializing libsignal version:0.73.2
2025/07/04 03:37:06:019  INF💛 [NSEEnvironment.swift:123 setUp(logger:)]: [NSE] pid: 20633, memoryUsage: 3719872 {{xxxx-xx-xx-xxx13B}}
2025/07/04 03:37:06:039  ERR❤️ [OWSSwiftUtils.swift:67 owsFail(_:logger:file:function:line:)]: 0   SignalNSE                           0x…074 SignalNSE + 41076
1   SignalServiceKit                    0x…e20 block_destroy_helper + 109520
2   SignalServiceKit                    0x…d3c block_destroy_helper + 109292
3   SignalNSE                           0x…e28 SignalNSE + 28200
4   SignalNSE                           0x…6b5 SignalNSE + 18101
5   SignalNSE                           0x…52d SignalNSE + 25901
6   SignalServiceKit                    0x…f75 __swift_memcpy101_8 + 110045
7   SignalServiceKit                    0x…689 __swift_mutable_project_boxed_opaque_existential_1Tm + 4077
8   libswift_Concurrency.dylib          0x…e39 xxxx-xx-xx-xxx093 + 433721

Is there a way we could provide the user the option to delete the corrupted database when this happens? Not a perfect solution but at least it would offer a way for people to fix it

WinterAlexander avatar Jul 06 '25 18:07 WinterAlexander

I've been encountering this issue (same as #5658 and #5395 ) but the complete uninstall and reinstall has not worked for me. I would be okay with losing my history if it meant I could get the app working, but no luck so far.

erica-bishop avatar Sep 08 '25 18:09 erica-bishop

Same issue here. Big bummer especially given the lack of features regarding freeing up space - no way to transfer messages between mobile and desktop, no way to find big files and get rid of them.

KaloyanTanev avatar Sep 17 '25 15:09 KaloyanTanev

Is there a way to get the (SQLite?) database from the smartphone? That way we could try to repair it on a computer.

Or restore the Signal database from a previous smartphone full backup?

C-Duv avatar Oct 25 '25 19:10 C-Duv

After 5-7 days, multiple restarts of the phone, freeing up couple of GBs of storage, the app has recovered.

KaloyanTanev avatar Oct 27 '25 09:10 KaloyanTanev

After 5-7 days, multiple restarts of the phone, freeing up couple of GBs of storage, the app has recovered.

@KaloyanTanev That's interesting! Has your data been fully recovered? Or has it unfortunately been lost?

baknu avatar Oct 28 '25 09:10 baknu

@baknu It was fully recovered. Apart from small subset of messages that I've exchanged during that 5-7 days period using my laptop. The majority of them were recovered on the phone though.

KaloyanTanev avatar Oct 28 '25 09:10 KaloyanTanev

@KaloyanTanev Oh, nice! How much space have you freed up? More than the volume of the Signal data? (Thought: maybe SQLite needs to make a full copy of the database to recover it.)

baknu avatar Oct 28 '25 10:10 baknu

@baknu Definitely less. My device has 64GB, Signal takes ~28GB, I freed up ~6GB (so I had 58/64 occupied).

KaloyanTanev avatar Oct 28 '25 16:10 KaloyanTanev

It's critically important that I recover my complete historical Signal message data after encountering a “Data Not Recovered” issue on my iPhone16ProMax iOS v18.5, Signal v7.82.

I'm assuming my above symptoms match this (#5815) github issue.

Overview

Signal devs (core or otherwise): can you pls comment on the viability of my 2 exploration paths below, and can you suggest any other paths?

I'm exploring two paths:

  • Path Alpha: try fixing the SQLite database "underneath the hood" and reintegrating (pls try not too laugh too hard 🙃) or at least reacquiring the data.
  • Path Beta: hope and pray it fixes itself by repetitive effort.

Path Alpha

@C-Duv writes:

Is there a way to get the (SQLite?) database from the smartphone? That way we could try to repair it on a computer.

Yeah, this.

  1. if Signal-iOS's database is indeed SQLite-based (and my initial ag-aka-grep code-tree search shows 800+ "sqlite" line matches, so it seems like a solid bet)...
  2. extract or copy the database (single file or file set) from my iPhone to a macOS or Linux computer
  3. repair said SQLite database
  4. reintegrate the SQLite database into a working, "pimary"/non-Linked Signal iOS client. (I'm guessing the initial probability of this is about the same as a snowball's chance in hell. But I have swdev experience, and I might be willing to build my own Signal-iOS client to try and hack this. Or something.)
  5. if #3 = yes but #4 = no, then at least I reacquire my Signal message history, which is critically important to me

Path Beta

In the meantime, I’ll be attempting KaloyanTanev’s “reboot many times” workaround in the (admittedly desperate) hope that it may restore my entire Signal install and message history, like it was before it crashed.

And in this case, it's perfectly acceptable if any recently-received messages (since my iPhone "primary" Signal instance went offline) are not restored. I mostly just want to reinstate the years and years of message history.

johnnyutahh avatar Nov 01 '25 00:11 johnnyutahh

After 5-7 days, multiple restarts of the phone, freeing up couple of GBs of storage, the app has recovered.

hi @KaloyanTanev, could you maybe share some more details? Did you not touch your device/the signal app for a while before it started working again on the next try? How often did you restart? Did you keep the 6GB freed up for the whole 5-7 days?

lp713 avatar Nov 24 '25 21:11 lp713

@lp713

Did you not touch your device/the signal app for a while before it started working again on the next try?

I was using it as normal - browsing, chatting (not on Signal, obviously :)), listening to music, taking work calls, etc. I have checked the Signal app every other day if it fixed itself magically.

How often did you restart?

Probably 3-5 times in that period. I don't think it made any difference though.

Did you keep the 6GB freed up for the whole 5-7 days?

Nope, I believe some of them got filled up in that period. I can't give you exact numbers but I doubt it was more than 1GB that got filled.

KaloyanTanev avatar Nov 25 '25 21:11 KaloyanTanev

Same issue here with an iPhone 13 that maxed out on memory. That iPhone can't read my messages but other, older Signal messages from others can still be reread. Only new ones from me give an error on that phone. On my side the messages (in and out) are visible without any problem.

So indeed, it seems a database that Signal uses gets corrupted when Signal runs into storage shortage.

How to get out of it? I now have to use Messages to reach this single user. Meanwhile that iPhone has more memory space after airdropping some long videos. But the database needs to get repaired! Preferably by Signal. Or does it work surely to wipe the Signal app completely and then restore from the Desktop app? The desktop might have a copy of only a month earlier before the issue started.

This is really a shame for such an important app. People rely on having their communication safely in the app.

rrustema avatar Nov 26 '25 08:11 rrustema

@KaloyanTanev Thanks for the quick answer and the info!

I am wondering if the data corruption you encountered only included "short term" data of some sort and no essential table data which is why it got sorted out after a while. I suppose it's mostly about which type of data is corrupted in each individual case when Signal runs out of storage during the writing process

lp713 avatar Nov 26 '25 14:11 lp713

I've freed about 12 GB recently (2-3 days ago) and hoping KaloyanTanev's (re)solution will occur on my phone as well.

In the mean time I've been looking on ways to "extract" the SQLite database file:


The "Could Not Load Database" message comes from this database exception handling (line 235):

https://github.com/signalapp/Signal-iOS/blob/b46b4da32c5450ab5eb466c7a2fa77b76580e1ef/Signal/AppLaunch/AppDelegate.swift#L219-L243

It offers 2 actions:

  • Submit Debug Log (the submitDebugLogsAndCrash action)
  • Reset App Data (the wipeAppDataAndCrash action)

It looks like the application has a "Database Integrity Check UI":

https://github.com/signalapp/Signal-iOS/blob/b46b4da32c5450ab5eb466c7a2fa77b76580e1ef/Signal/AppLaunch/SignalApp.swift#L412-L452

It can be accessed from 2 places:

  1. The application's settings (inaccessible when the application refuses to start):

https://github.com/signalapp/Signal-iOS/blob/b46b4da32c5450ab5eb466c7a2fa77b76580e1ef/Signal/src/ViewControllers/AppSettings/Internal/InternalSettingsViewController.swift#L95-L103

  1. The submitDebugLogsWithDatabaseIntegrityCheckAndCrash action, next to the same submitDebugLogsAndCrash action from earlier in my message:

https://github.com/signalapp/Signal-iOS/blob/b46b4da32c5450ab5eb466c7a2fa77b76580e1ef/Signal/AppLaunch/AppDelegate.swift#L1242-L1310

But I can't find how to trigger it.


I am not sure if/when the following code get executed:

https://github.com/signalapp/Signal-iOS/blob/b46b4da32c5450ab5eb466c7a2fa77b76580e1ef/Signal/AppLaunch/AppDelegate.swift#L1039-L1053

But it seems to be the one deciding whether the corrupted database is recoverable or not.


The dabase file is signal.sqlite (complete file path returned by SDSDatabaseStorage.grdbDatabaseFileUrl()), with the Write-Ahead Logging (WAL) being signal.sqlite-wal (complete file path returned by SDSDatabaseStorage.databaseWalUrl()).

I am pretty sure the Signal application can "share" those files using iOS's share functionality, at least to make them accessible using the native File application with something like:

let activityViewController = UIActivityViewController(activityItems: ["Signal DB", SDSDatabaseStorage.grdbDatabaseFileUrl()], applicationActivities: nil)
present(activityViewController, animated: true, completion: nil)

C-Duv avatar Dec 08 '25 14:12 C-Duv