- bool ok = true, commited = false;
- if (commit) {
- SecDbNotifyPhase(dbconn, kSecDbTransactionWillCommit);
- commited = ok = SecDbExec(dbconn, CFSTR("END"), error);
- } else {
- ok = SecDbExec(dbconn, CFSTR("ROLLBACK"), error);
- commited = false;
- }
- dbconn->inTransaction = false;
- SecDbNotifyPhase(dbconn, commited ? kSecDbTransactionDidCommit : kSecDbTransactionDidRollback);
- dbconn->source = kSecDbAPITransaction;
- return ok;
+ return SecDbOnNotifyQueue(dbconn, ^{
+ bool ok = true, commited = false;
+ if (commit) {
+ SecDbNotifyPhase(dbconn, kSecDbTransactionWillCommit);
+ commited = ok = SecDbExec(dbconn, CFSTR("END"), error);
+ } else {
+ ok = SecDbExec(dbconn, CFSTR("ROLLBACK"), error);
+ commited = false;
+ }
+ dbconn->inTransaction = false;
+ SecDbNotifyPhase(dbconn, commited ? kSecDbTransactionDidCommit : kSecDbTransactionDidRollback);
+ dbconn->source = kSecDbAPITransaction;
+ return ok;
+ });