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)
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");
{
bufferlist bl;
+ lock.Lock();
rgw_format_ops_log_entry(entry, formatter);
formatter_to_bl(bl);
+ lock.Unlock();
append_output(bl);
}
class OpsLogSocket : public OutputDataSocket {
Formatter *formatter;
+ Mutex lock;
void formatter_to_bl(bufferlist& bl);