Boost logo

Boost :

Subject: Re: [boost] [filesystems]
From: Florian Lindner (mailinglists_at_[hidden])
Date: 2019-03-14 11:31:16

Am 14.03.19 um 11:19 schrieb Adam Majer via Boost:
> On 3/14/19 9:31 AM, Florian Lindner via Boost wrote:
>> However, I have no idea how that could happen. I use the rename, so
>> that a reading process never sees an empty file, but only no file or
>> filed with info. Is there any race involved between ofs.close() and
>> fs:rename()? The code was executed on a distributed network
>> filesystem (lustre).
>> Any ideas anyone?
> `strace -e trace=%file,close program` and complain to file system for
> not working. This doesn't seem to have anything to do with
> boost::filesystem, more with the underlying filesystem.
> It's not close that matters, but open. Your program should work just fine without the explicit close.

I was not trying to blame boost::filesystem, just trying to get ideas what can cause this.

I have modified the code to:

  namespace fs = boost::filesystem;
  auto path = getFilename();
  auto tmp = fs::path(path + "~");
  boost::iostreams::stream<boost::iostreams::file_descriptor_sink> ofs(tmp);
  ofs << info;
  fs::rename(tmp, path);

maybe the fdatasync helps. strace is complicated, as I haven't managend to reliable reproduce the bug.


Boost list run by bdawes at, gregod at, cpdaniel at, john at