mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Make db in the format metadata proxy classes into a weak reference to avoid garbage collection problems. One consequence: if the db has gone away before the metadata is used, then the format information will appear to be empty.
This commit is contained in:
parent
c68075bc08
commit
420edc45e0
@ -7,7 +7,7 @@ __docformat__ = 'restructuredtext en'
|
|||||||
The database used to store ebook metadata
|
The database used to store ebook metadata
|
||||||
'''
|
'''
|
||||||
import os, sys, shutil, cStringIO, glob, time, functools, traceback, re, \
|
import os, sys, shutil, cStringIO, glob, time, functools, traceback, re, \
|
||||||
json, uuid, hashlib, copy
|
json, uuid, hashlib, copy, weakref
|
||||||
from collections import defaultdict, MutableMapping, MutableSequence
|
from collections import defaultdict, MutableMapping, MutableSequence
|
||||||
import threading, random
|
import threading, random
|
||||||
from itertools import repeat
|
from itertools import repeat
|
||||||
@ -84,7 +84,7 @@ class Tag(object):
|
|||||||
class FormatMetadata(MutableMapping): # {{{
|
class FormatMetadata(MutableMapping): # {{{
|
||||||
|
|
||||||
def __init__(self, db, id_, formats):
|
def __init__(self, db, id_, formats):
|
||||||
self.db = db
|
self.dbwref = weakref.ref(db)
|
||||||
self.id_ = id_
|
self.id_ = id_
|
||||||
self.formats = formats
|
self.formats = formats
|
||||||
self._must_do = True
|
self._must_do = True
|
||||||
@ -94,7 +94,7 @@ class FormatMetadata(MutableMapping): # {{{
|
|||||||
if self._must_do:
|
if self._must_do:
|
||||||
for f in self.formats:
|
for f in self.formats:
|
||||||
try:
|
try:
|
||||||
self.values[f] = self.db.format_metadata(self.id_, f)
|
self.values[f] = self.dbwref().format_metadata(self.id_, f)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
self._must_do = False
|
self._must_do = False
|
||||||
|
Loading…
x
Reference in New Issue
Block a user