Skip to content

Release global interpreter lock during SQLExecute/SQLExecDirect

Choose a tag to compare

@smlsml smlsml released this 26 Feb 21:36
· 23 commits to master since this release

Wed Jan 16 2014 version 0.99996.cv released

* Added call to rb_thread_blocking_region to release the global
  interpreter lock during SQLExecute and SQLExecDirect and require it
  afterwards.

  This improves performance by not blocking all Ruby threads during long
  running queries. This also fixes a deadlock which can occur in SQLExecute and
  SQLExecDirect which can happen when trying to read (if isolation level is
  "read committed", "repeatable read", "serializable", etc.) or when trying to
  modify a dirty row that has been modified by an uncommitted transaction. If this
  transaction was initiated by a ruby thread in the same process, all ruby threads
  will hang and the ruby process will become unresponsive.