diff options
author | drh <> | 2023-01-11 00:27:06 +0000 |
---|---|---|
committer | drh <> | 2023-01-11 00:27:06 +0000 |
commit | 3b7a19b033a8177e0897ee5e9799f0dea480265c (patch) | |
tree | 552c2f15d826f31512772592bdd127353b6de2bc /src/main.c | |
parent | 706631de32efdc9c043f1b8822040ce41eaf756c (diff) | |
download | sqlite-3b7a19b033a8177e0897ee5e9799f0dea480265c.tar.gz sqlite-3b7a19b033a8177e0897ee5e9799f0dea480265c.zip |
Add a new sqlite3_is_interrupted() interface that can be used by long-running
app-defined functions and similar to see if they need to exit early due to
an sqlite3_interrupt() call.
FossilOrigin-Name: d030f341369b7f32789cbcf3d0ad9a2ac5cad99a56dac7dfe68b7f06dc339b17
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/main.c b/src/main.c index e22ff96de..eaecb56df 100644 --- a/src/main.c +++ b/src/main.c @@ -1796,7 +1796,9 @@ int sqlite3_busy_timeout(sqlite3 *db, int ms){ */ void sqlite3_interrupt(sqlite3 *db){ #ifdef SQLITE_ENABLE_API_ARMOR - if( !sqlite3SafetyCheckOk(db) && (db==0 || db->eOpenState!=SQLITE_STATE_ZOMBIE) ){ + if( !sqlite3SafetyCheckOk(db) + && (db==0 || db->eOpenState!=SQLITE_STATE_ZOMBIE) + ){ (void)SQLITE_MISUSE_BKPT; return; } @@ -1804,6 +1806,21 @@ void sqlite3_interrupt(sqlite3 *db){ AtomicStore(&db->u1.isInterrupted, 1); } +/* +** Return true or false depending on whether or not an interrupt is +** pending on connection db. +*/ +int sqlite3_is_interrupted(sqlite3 *db){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) + && (db==0 || db->eOpenState!=SQLITE_STATE_ZOMBIE) + ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + return AtomicLoad(&db->u1.isInterrupted)!=0; +} /* ** This function is exactly the same as sqlite3_create_function(), except |