Package: offlineimap3
Version: 0.0~git20211018.e64c254+dfsg-1
Severity: grave
Tags: fixed-upstream patch
Justification: renders package unusable
Forwarded: https://github.com/OfflineIMAP/offlineimap3/issues/136
Control: block 1026825 by -1

After upgrading to python3 (>= 3.11) I get lots of these errors:

> ERROR: ERROR in syncfolder for REDACTED folder .REDACTED: Traceback (most 
> recent call last):
>   File "/usr/share/offlineimap3/offlineimap/accounts.py", line 610, in 
> syncfolder
>     statusfolder.openfiles()
>   File "/usr/share/offlineimap3/offlineimap/folder/LocalStatusSQLite.py", 
> line 107, in openfiles
>     assert sqlite.threadsafety == 1, 'Your sqlite is not multithreading safe.'
>            ^^^^^^^^^^^^^^^^^^^^^^^^
> AssertionError: Your sqlite is not multithreading safe

and as far as I can tell, no mail is synchronized.
https://github.com/OfflineIMAP/offlineimap3/pull/139 appears to be the
upstream solution for this, and seems to be a suitable patch for the
version currently in Debian. Please see attached or the upstream PR.

    smcv

-- System Information:
Debian Release: bookworm/sid
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'stable-security'), (500, 
'oldstable-debug'), (500, 'oldoldstable'), (500, 'buildd-unstable'), (500, 
'unstable'), (500, 'testing'), (500, 'stable'), (500, 'oldstable'), (1, 
'experimental-debug'), (1, 'buildd-experimental'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 6.0.0-6-amd64 (SMP w/4 CPU threads; PREEMPT)
Locale: LANG=en_GB.utf8, LC_CTYPE=en_GB.utf8 (charmap=UTF-8), LANGUAGE=en_GB:en
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages offlineimap3 depends on:
ii  ca-certificates   20211016
ii  python3           3.11.1-1
ii  python3-distro    1.8.0-1
ii  python3-imaplib2  2.57-5.2

offlineimap3 recommends no packages.

Versions of packages offlineimap3 suggests:
pn  python3-gssapi  <none>

-- no debconf information

-- debsums errors found:
debsums: changed file 
/usr/share/offlineimap3/offlineimap/folder/LocalStatusSQLite.py (from 
offlineimap3 package)
>From 7cd32cf834b34a3d4675b29bebcd32dc1e5ef128 Mon Sep 17 00:00:00 2001
From: 0pointerexception <w...@wmeyer.eu>
Date: Thu, 17 Nov 2022 19:43:58 +0100
Subject: [PATCH] LocalStatusSQLite.py: Python 3.11 compatible threadsafety
 check

Signed-off-by: 0pointerexception <w...@wmeyer.eu>
---
 offlineimap/folder/LocalStatusSQLite.py | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/offlineimap/folder/LocalStatusSQLite.py b/offlineimap/folder/LocalStatusSQLite.py
index a576b9ca..3c44643f 100644
--- a/offlineimap/folder/LocalStatusSQLite.py
+++ b/offlineimap/folder/LocalStatusSQLite.py
@@ -17,7 +17,7 @@
 
 import os
 import sqlite3 as sqlite
-from sys import exc_info
+from sys import exc_info,version_info
 from threading import Lock
 from .Base import BaseFolder
 
@@ -75,6 +75,11 @@ def __init__(self, name, repository):
         self.filename = os.path.join(self.getroot(), self.getfolderbasename())
 
         self._newfolder = False  # Flag if the folder is new.
+        """
+        sqlite threading mode must be 3 as of Python 3.11, checking against
+        1 for versions below Python 3.11 to sustain backwards compatibility.
+        """
+        self._threading_mode_const = 3 if version_info.minor >=11 else 1
 
         dirname = os.path.dirname(self.filename)
         if not os.path.exists(dirname):
@@ -102,9 +107,10 @@ def __exit__(self, exc_type, exc_val, exc_tb):
             if self._in_transactions < 1:
                 self.connection.commit()
 
+
     def openfiles(self):
         # Make sure sqlite is in multithreading SERIALIZE mode.
-        assert sqlite.threadsafety == 1, 'Your sqlite is not multithreading safe.'
+        assert sqlite.threadsafety == self._threading_mode_const, 'Your sqlite is not multithreading safe.'
 
         with self._databaseFileLock.getLock():
             # Try to establish connection, no need for threadsafety in __init__.

Reply via email to