Fix a segmentation fault caused by invalid log directory in InternalFlush().
PiperOrigin-RevId: 168557063
This commit is contained in:
parent
009285c09f
commit
b00b6d23c8
@ -24,6 +24,7 @@ from tensorflow.contrib.summary import summary_ops
|
|||||||
from tensorflow.core.util import event_pb2
|
from tensorflow.core.util import event_pb2
|
||||||
from tensorflow.python.eager import function
|
from tensorflow.python.eager import function
|
||||||
from tensorflow.python.eager import test
|
from tensorflow.python.eager import test
|
||||||
|
from tensorflow.python.framework import errors
|
||||||
from tensorflow.python.framework import test_util
|
from tensorflow.python.framework import test_util
|
||||||
from tensorflow.python.lib.io import tf_record
|
from tensorflow.python.lib.io import tf_record
|
||||||
from tensorflow.python.platform import gfile
|
from tensorflow.python.platform import gfile
|
||||||
@ -32,6 +33,12 @@ from tensorflow.python.training import training_util
|
|||||||
|
|
||||||
class TargetTest(test_util.TensorFlowTestCase):
|
class TargetTest(test_util.TensorFlowTestCase):
|
||||||
|
|
||||||
|
def testInvalidDirectory(self):
|
||||||
|
logdir = '/tmp/apath/that/doesnt/exist'
|
||||||
|
self.assertFalse(gfile.Exists(logdir))
|
||||||
|
with self.assertRaises(errors.NotFoundError):
|
||||||
|
summary_ops.create_summary_file_writer(logdir, max_queue=0, name='t0')
|
||||||
|
|
||||||
def testShouldRecordSummary(self):
|
def testShouldRecordSummary(self):
|
||||||
self.assertFalse(summary_ops.should_record_summaries().numpy())
|
self.assertFalse(summary_ops.should_record_summaries().numpy())
|
||||||
summary_ops.always_record_summaries()
|
summary_ops.always_record_summaries()
|
||||||
|
@ -212,6 +212,7 @@ class SummaryWriterImpl : public SummaryWriterInterface {
|
|||||||
public:
|
public:
|
||||||
SummaryWriterImpl(int max_queue, int flush_millis)
|
SummaryWriterImpl(int max_queue, int flush_millis)
|
||||||
: SummaryWriterInterface(),
|
: SummaryWriterInterface(),
|
||||||
|
is_initialized_(false),
|
||||||
max_queue_(max_queue),
|
max_queue_(max_queue),
|
||||||
flush_millis_(flush_millis) {}
|
flush_millis_(flush_millis) {}
|
||||||
|
|
||||||
@ -231,11 +232,15 @@ class SummaryWriterImpl : public SummaryWriterInterface {
|
|||||||
return errors::Unknown("Could not initialize events writer.");
|
return errors::Unknown("Could not initialize events writer.");
|
||||||
}
|
}
|
||||||
last_flush_ = Env::Default()->NowMicros();
|
last_flush_ = Env::Default()->NowMicros();
|
||||||
|
is_initialized_ = true;
|
||||||
return Status::OK();
|
return Status::OK();
|
||||||
}
|
}
|
||||||
|
|
||||||
Status Flush() override {
|
Status Flush() override {
|
||||||
mutex_lock ml(mu_);
|
mutex_lock ml(mu_);
|
||||||
|
if (!is_initialized_) {
|
||||||
|
return errors::FailedPrecondition("Class was not properly initialized.");
|
||||||
|
}
|
||||||
return InternalFlush();
|
return InternalFlush();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -403,6 +408,7 @@ class SummaryWriterImpl : public SummaryWriterInterface {
|
|||||||
return Status::OK();
|
return Status::OK();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool is_initialized_;
|
||||||
const int max_queue_;
|
const int max_queue_;
|
||||||
const int flush_millis_;
|
const int flush_millis_;
|
||||||
uint64 last_flush_;
|
uint64 last_flush_;
|
||||||
|
Loading…
Reference in New Issue
Block a user