]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/common: implement "__ceph_abortf()"
authorKefu Chai <kchai@redhat.com>
Sat, 29 Jun 2019 11:50:18 +0000 (19:50 +0800)
committerKefu Chai <kchai@redhat.com>
Sat, 29 Jun 2019 12:03:20 +0000 (20:03 +0800)
the macro of `ceph_abort_msgf()` is implemented using it.

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/common/assert.cc

index b5f715d45086a3efb76394ed0ecfe2d44bb31cd3..c5b4f6235efe4ee23df692a11ffca8072da02dc7 100644 (file)
@@ -39,8 +39,9 @@ namespace ceph {
 
     seastar::logger& logger = ceph::get_logger(0);
     logger.error("{}:{} : In function '{}', ceph_assert(%s)\n"
-                 "{}",
+                 "{}\n{}\n",
                  file, line, func, assertion,
+                 buf,
                  seastar::current_backtrace());
     std::cout << std::flush;
     abort();
@@ -57,4 +58,24 @@ namespace ceph {
     std::cout << std::flush;
     abort();
   }
+
+  [[gnu::cold]] void __ceph_abortf(const char* file, int line,
+                                   const char* func, const char* fmt,
+                                   ...)
+  {
+    char buf[8096];
+    va_list args;
+    va_start(args, fmt);
+    std::vsnprintf(buf, sizeof(buf), fmt, args);
+    va_end(args);
+
+    seastar::logger& logger = ceph::get_logger(0);
+    logger.error("{}:{} : In function '{}', abort()\n"
+                 "{}\n{}\n",
+                 file, line, func,
+                 buf,
+                 seastar::current_backtrace());
+    std::cout << std::flush;
+    abort();
+  }
 }