RawDiskImage::~RawDiskImage()
{ close(); }
+void
+RawDiskImage::notifyFork()
+{
+ if (initialized && !readonly)
+ panic("Attempting to fork system with read-write raw disk image.");
+
+ const Params *p(dynamic_cast<const Params *>(params()));
+ close();
+ open(p->image_file, p->read_only);
+}
+
void
RawDiskImage::open(const string &filename, bool rd_only)
{
}
}
+void
+CowDiskImage::notifyFork()
+{
+ if (!dynamic_cast<const Params *>(params())->read_only &&
+ !filename.empty()) {
+ inform("Disabling saving of COW image in forked child process.\n");
+ filename = "";
+ }
+}
+
void
SafeRead(ifstream &stream, void *data, int count)
{
void
CowDiskImage::save() const
{
- save(filename);
-}
+ // filename will be set to the empty string to disable saving of
+ // the COW image in a forked child process. Save will still be
+ // called because there is no easy way to unregister the exit
+ // callback.
+ if (!filename.empty())
+ save(filename);}
void
CowDiskImage::save(const string &file) const
RawDiskImage(const Params *p);
~RawDiskImage();
+ void notifyFork() override;
+
void close();
void open(const std::string &filename, bool rd_only = false);
CowDiskImage(const Params *p);
~CowDiskImage();
+ void notifyFork() override;
+
void initSectorTable(int hash_size);
bool open(const std::string &file);
void save() const;