]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: protect ops log socket formatter
authorYehuda Sadeh <yehuda@inktank.com>
Fri, 3 May 2013 19:57:00 +0000 (12:57 -0700)
committerSage Weil <sage@inktank.com>
Tue, 21 May 2013 20:07:20 +0000 (13:07 -0700)
Fixes: #4905
Ops log (through the unix domain socket) uses a formatter, which wasn't
protected.

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
(cherry picked from commit d48f1edb07a4d8727ac956f70e663c1b4e33e1dd)

src/rgw/rgw_log.cc
src/rgw/rgw_log.h

index e999f623a018b7abab7c28d4be3be4a6e61a76ac..62dd8c0c46cc8186f3c58901c8c2714d68a678d3 100644 (file)
@@ -233,7 +233,7 @@ void OpsLogSocket::init_connection(bufferlist& bl)
   bl.append("[");
 }
 
-OpsLogSocket::OpsLogSocket(CephContext *cct, uint64_t _backlog) : OutputDataSocket(cct, _backlog)
+OpsLogSocket::OpsLogSocket(CephContext *cct, uint64_t _backlog) : OutputDataSocket(cct, _backlog), lock("OpsLogSocket")
 {
   formatter = new JSONFormatter;
   delim.append(",\n");
@@ -248,8 +248,10 @@ void OpsLogSocket::log(struct rgw_log_entry& entry)
 {
   bufferlist bl;
 
+  lock.Lock();
   rgw_format_ops_log_entry(entry, formatter);
   formatter_to_bl(bl);
+  lock.Unlock();
 
   append_output(bl);
 }
index 823f0b1767f0186d3a5fc09546b6d98109dc2714..37e387d4ce6d656284abd61af387b3dd07f371aa 100644 (file)
@@ -119,6 +119,7 @@ WRITE_CLASS_ENCODER(rgw_intent_log_entry)
 
 class OpsLogSocket : public OutputDataSocket {
   Formatter *formatter;
+  Mutex lock;
 
   void formatter_to_bl(bufferlist& bl);