Stacktrace (most recent call last):
File "django/core/handlers/base.py", line 119, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "posts/views.py", line 404, in get
posts_post.save()
File "django/db/models/base.py", line 475, in save
self.save_base(using=using, force_insert=force_insert,
force_update=force_update)
File "django/db/models/base.py", line 506, in save_base
signals.pre_save.send(sender=origin, instance=self, raw=raw,
using=using)
File "django/dispatch/dispatcher.py", line 183, in send
response = receiver(signal=self, sender=sender, **named)
File "haystack/models.py", line 268, in load_indexes
ui.setup_indexes()
File "haystack/utils/loading.py", line 283, in setup_indexes
index._setup_save()
File "celery_haystack/indexes.py", line 33, in _setup_save
signals.post_save.connect(self._enqueue_save, sender=model,
dispatch_uid=CelerySearchIndex)
File "django/dispatch/dispatcher.py", line 105, in connect
receiver = saferef.safeRef(receiver, onDelete=self._remove_receiver)
File "django/dispatch/saferef.py", line 29, in safeRef
onDelete=onDelete
File "django/dispatch/saferef.py", line 248, in get_bound_method_weakref
return BoundMethodWeakref(target=target, onDelete=onDelete)
File "django/dispatch/saferef.py", line 88, in __new__
current.deletionMethods.append( onDelete)
}}}
I suspect this has something to do with the threading environment I'm
using. I'm attaching a patch that I believe fixes the issue.
--
Ticket URL: <https://code.djangoproject.com/ticket/19511>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* cc: Kronuz (added)
* needs_better_patch: => 0
* needs_tests: => 0
* needs_docs: => 0
--
Ticket URL: <https://code.djangoproject.com/ticket/19511#comment:1>
Comment (by apollo13):
#19510 was a duplicate.
--
Ticket URL: <https://code.djangoproject.com/ticket/19511#comment:2>
* status: new => closed
* resolution: => fixed
Comment:
Did you attach the wrong patch here?
--
Ticket URL: <https://code.djangoproject.com/ticket/19511#comment:2>
* status: closed => new
* resolution: fixed =>
Comment:
Wth did the resolution get set to fixed :/
--
Ticket URL: <https://code.djangoproject.com/ticket/19511#comment:3>
* status: new => closed
* resolution: => needsinfo
Comment:
This may be a valid issue, but the description doesn't include enough
information to reproduce it and the wrong patch was attached.
--
Ticket URL: <https://code.djangoproject.com/ticket/19511#comment:4>
* status: closed => new
* resolution: needsinfo =>
Comment:
Sorry I attached the wrong file, I've just attached the correct one.
The problem seems to be the `BoundMethodWeakref._allInstances` is filled
with an uninitialised object, and when/if another thread tries to get and
use the object, it doesn't still have at least the `deletionMethods`
attribute which is added durin the call to `__init__()`.
--
Ticket URL: <https://code.djangoproject.com/ticket/19511#comment:5>
* type: Uncategorized => Bug
* component: Uncategorized => Core (Other)
* stage: Unreviewed => Accepted
Comment:
The explanation seems correct to me. It also seems this will be impossible
to test. You will need to switch to another thread in between the dict
assignment and the `__init__()` call, and then you need to access the same
key in another thread. An unlikely scenario.
--
Ticket URL: <https://code.djangoproject.com/ticket/19511#comment:6>
* status: new => closed
* resolution: => invalid
Comment:
Our implementation of weakrefs has now gone in favour of (backported) code
from python 3.4. This should hopefully no longer be an issue.
--
Ticket URL: <https://code.djangoproject.com/ticket/19511#comment:7>