Akonadi

dbdeadlockcatcher.h
1 /*
2  Copyright (c) 2019 David Faure <[email protected]>
3 
4  This library is free software; you can redistribute it and/or modify it
5  under the terms of the GNU Library General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or (at your
7  option) any later version.
8 
9  This library is distributed in the hope that it will be useful, but WITHOUT
10  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
12  License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to the
16  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17  02110-1301, USA.
18 */
19 
20 #ifndef AKONADI_DBDEADLOCKCATCHER_H
21 #define AKONADI_DBDEADLOCKCATCHER_H
22 
23 #include "dbexception.h"
24 
25 namespace Akonadi
26 {
27 
28 namespace Server
29 {
30 
37 {
38 public:
39  template <typename Func>
40  explicit DbDeadlockCatcher(Func &&func) { callFunc(func, 0); }
41 
42 private:
43  static const int MaxRecursion = 5;
44  template <typename Func>
45  void callFunc(Func &&func, int recursionCounter) {
46  try {
47  func();
48  } catch(const DbDeadlockException &) {
49  if (recursionCounter == MaxRecursion) {
50  throw;
51  } else {
52  callFunc(func, ++recursionCounter); // recurse
53  }
54  }
55  }
56 };
57 
58 } // namespace Server
59 } // namespace Akonadi
60 
61 #endif
This class catches DbDeadlockException (as emitted by QueryBuilder) and retries execution of the meth...
Helper integration between Akonadi and Qt.
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Wed May 27 2020 22:43:37 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.