Opened 14 years ago
Closed 13 years ago
#17066 closed Bug (fixed)
Exception TypeError when using GeoIP
| Reported by: | Mitar | Owned by: | nobody |
|---|---|---|---|
| Component: | GIS | Version: | 1.4 |
| Severity: | Normal | Keywords: | |
| Cc: | mmitar@…, Stefan Wehrmeyer | Triage Stage: | Ready for checkin |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
When using GeoIP in my code I am getting such error at the end of syncdb call:
Exception TypeError: "'NoneType' object is not callable" in <bound method GeoIP.__del__ of <django.contrib.gis.utils.geoip.GeoIP object at 0x103a35690>> ignored
It seems there is some race condition? I am using Python 2.7.2 on Mac OS X. It has threaded support enabled. Django 1.3. python-geoip 1.2.5, libgeoip 1.4.7.
Attachments (1)
Change History (10)
comment:1 by , 14 years ago
comment:2 by , 14 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:5 by , 13 years ago
It could be useful if anyone could provide us with a basic project where this error can be reproduced.
comment:6 by , 13 years ago
| Resolution: | → needsinfo |
|---|---|
| Status: | new → closed |
comment:7 by , 13 years ago
| Cc: | added |
|---|---|
| Resolution: | needsinfo |
| Status: | closed → new |
I can confirm this on Django 1.4.3 with geoip 1.4.8.
I attached a test project that should reproduce this error. Instructions: Extract, install requirements (Django==1.4.3) and run runtest.sh which downloads GeoIP country data (slightly too big to attach) and then does a syncdb (any Django command will do).
The exception should be the last line of the output. The culprit is obviously in django.contrib.gis.geoip.base.GeoIP.__del__ where GeoIP_delete is None when this method is called.
Replacing __del__ with the following removes the exception, but may leave file handles lying around (I have no deeper knowledge about that).
def __del__(self):
# Cleaning any GeoIP file handles lying around.
if GeoIP_delete is None:
return
if self._country: GeoIP_delete(self._country)
if self._city: GeoIP_delete(self._city)
comment:8 by , 13 years ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
Thanks for the research on that issue. I guess that we might have difficulties to come with a test for this, so I suggest to simply add the if GeoIP_delete is None safeguard, and call it a day!
comment:9 by , 13 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
This looks similar to #13488 and #13843.