System.Data.SQLite

Check-in [73c64a8452]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Fix infinite connection disposal cycle caused by not nulling out the connection enlistment for a rolled back transaction.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | tkt-5cee5409f8
Files: files | file ages | folders
SHA1: 73c64a84528d7d9073bc6c68f422bfa8b99ab59a
User & Date: mistachkin 2018-01-26 03:04:25.805
Context
2018-01-27
19:55
Add experimental WaitForEnlistmentReset method to the SQLiteConnection class. check-in: 2d7e759341 user: mistachkin tags: tkt-5cee5409f8
2018-01-26
03:04
Fix infinite connection disposal cycle caused by not nulling out the connection enlistment for a rolled back transaction. check-in: 73c64a8452 user: mistachkin tags: tkt-5cee5409f8
02:23
Merge updates from trunk. check-in: 596797845c user: mistachkin tags: tkt-5cee5409f8
Changes
Unified Diff Ignore Whitespace Patch
Changes to System.Data.SQLite/SQLiteEnlistment.cs.
271
272
273
274
275
276
277


278
279
280
281
282
283
284
                    //       the SQLiteConnection.Close() method changes the
                    //       connection associated with our transaction (i.e.
                    //       to avoid a race (condition) between grabbing the
                    //       Connection property and locking its enlistment).
                    //
                    if (!Object.ReferenceEquals(cnn, _transaction.Connection))
                        continue;



                    _transaction.Rollback();

                    break;
                }
            }








>
>







271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
                    //       the SQLiteConnection.Close() method changes the
                    //       connection associated with our transaction (i.e.
                    //       to avoid a race (condition) between grabbing the
                    //       Connection property and locking its enlistment).
                    //
                    if (!Object.ReferenceEquals(cnn, _transaction.Connection))
                        continue;

                    cnn._enlistment = null;

                    _transaction.Rollback();

                    break;
                }
            }