Opened 7 years ago

Closed 6 years ago

Last modified 3 years ago

#6341 closed defect (fixed)

Cannot operate on a closed cursor error

Reported by: lkraav Owned by: lkraav
Priority: normal Component: TracPastePlugin
Severity: normal Keywords: ProgrammingError, closed, cursor
Cc: Michael Renzmann Trac Release: 0.11

Description (last modified by Ryan J Ollos)

2009-12-16 14:26:35,474 Trac[chrome] DEBUG: Prepare chrome data for request
2009-12-16 14:26:35,478 Trac[model] DEBUG: get_pastes() SQL: 'SELECT id, title, author, time FROM pastes ORDER BY id DESC LIMIT 10' (None)
2009-12-16 14:26:35,599 Trac[main] ERROR: Internal Server Error:
Traceback (most recent call last):
  File "/secure/trac/virtual-0.11/trac-src/trac/web/", line 450, in _dispatch_request
  File "/secure/trac/virtual-0.11/trac-src/trac/web/", line 206, in dispatch
    resp = chosen_handler.process_request(req)
  File "build/bdist.linux-i686/egg/tracpaste/", line 141, in process_request
    'recent':           get_pastes(env=self.env, number=self.max_recent)
  File "build/bdist.linux-i686/egg/tracpaste/", line 53, in get_pastes
    cursor.execute(sql, where_values)
  File "/secure/trac/virtual-0.11/trac-src/trac/db/", line 65, in execute
    return self.cursor.execute(sql)
  File "/secure/trac/virtual-0.11/trac-src/trac/db/", line 80, in execute
    PyFormatCursor.execute(self, *args)
  File "/secure/trac/virtual-0.11/trac-src/trac/db/", line 59, in execute
    args or [])
  File "/secure/trac/virtual-0.11/trac-src/trac/db/", line 51, in _rollback_on_error
    return function(self, *args, **kwargs)
ProgrammingError: Cannot operate on a closed cursor.

Attachments (0)

Change History (9)

comment:1 Changed 7 years ago by lkraav

this could be related to #6302.

comment:2 Changed 7 years ago by Ryan J Ollos

Description: modified (diff)
Summary: TracPastePlugin: 0.11.6 - Cannot operate on a closed cursor errorCannot operate on a closed cursor error

#7138 was closed as a duplicate.

comment:3 Changed 6 years ago by Ryan J Ollos

Cc: Michael Renzmann added; anonymous removed

Isn't this (source:tracpasteplugin/0.11/tracpaste/

cursor = (db or env.get_db_cnx()).cursor()

just as bad of a practice as?:

cursor = env.get_db_cnx().cursor

Shouldn't we replace that code with?:

db = (db or env.get_db_cnx())
cursor = db.cursor()

Per t:wiki:TracDev/DatabaseApi#APIbeforeTrac0.12

comment:4 Changed 6 years ago by Ryan J Ollos

Since I have TracPastePlugin setup in a dev environment following #8298, I'd be happy to apply the proposed fix for this as well, given permission of the maintainer.

  • 0.11/tracpaste/

    2929    To get the paste data, use id to instantiate a Paste object."""
    31     cursor = (db or env.get_db_cnx()).cursor()
     31    db = db or env.get_db_cnx()
     32    cursor = db.cursor()
    3334    sql = "SELECT id, title, author, time FROM pastes"
    3435    order_clause = " ORDER BY id DESC"

comment:5 Changed 6 years ago by Ryan J Ollos

#6361 closed as a duplicate.

comment:6 Changed 6 years ago by Odd Simon Simonsen

Patch looks good to me.

comment:7 Changed 6 years ago by Michael Renzmann

No objections from me. Feel free to commit.

comment:8 Changed 6 years ago by Ryan J Ollos

Resolution: fixed
Status: newclosed

(In [9678]) Attempt to resolve reported closed cursor error by making sure db object does not get removed up by Python. Version bumped to 0.2.2. Fixes #6341.

comment:9 Changed 3 years ago by Ryan J Ollos

Keywords: ProgrammingError closed cursor added

Modify Ticket

as closed The owner will remain lkraav.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment

E-mail address and name can be saved in the Preferences.

Note: See TracTickets for help on using tickets.