     ///                  number of times it’s been called for this lock. If it
     ///                  returns true, it will try again. If it returns false,
     ///                  no further attempts will be made.
-    public func busy(callback: (Int -> Bool)?) {
+    public func busy(callback: ((tries: Int) -> Bool)?) {
         try {
             if let callback = callback {
-                self.busy = { callback(Int($0)) ? 1 : 0 }
+                self.busy = { callback(tries: Int($0)) ? 1 : 0 }
             } else {
                 self.busy = nil
             }

    ///                       depending on success or failure.
    ///
    /// :returns: The RELEASE or ROLLBACK statement.
    public func savepoint(_ savepointName: String? = nil, @noescape _ block: Statement -> SavepointResult) -> Statement {
        switch block(savepoint(savepointName)) {
        case .Release:
            return release()
        case .Rollback:

    ///               failure.
    ///
    /// :returns: The COMMIT or ROLLBACK statement.
    public func transaction(_ mode: TransactionMode = .Deferred, @noescape _ block: (txn: Statement) -> TransactionResult) -> Statement {
        return run(block(txn: transaction(mode)).rawValue)
    }

    /// Commits the current transaction (or, if a savepoint is open, releases
