mesos-reviews mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From James Peach <jpe...@apache.org>
Subject Re: Review Request 53041: Added `setxattr()` and `getxattr()` in stout.
Date Fri, 28 Oct 2016 14:46:18 GMT


> On Oct. 27, 2016, 5:03 p.m., Jie Yu wrote:
> > 3rdparty/stout/include/stout/os/posix/xattr.hpp, lines 71-72
> > <https://reviews.apache.org/r/53041/diff/4/?file=1544874#file1544874line71>
> >
> >     I think James made a valid point there that errno might not be preserved across
delete. So using a vector<char> sounds better.
> 
> Qian Zhang wrote:
>     I think `delete` will not change `errno`, I verified it by a small program:
>     ```
>     #include <errno.h>
>     #include <fcntl.h>
>     
>     int main()
>     {
>       char* temp = new char[4];
>     
>       if (open("/xxx", 0) < 0) {
>         delete[] temp;
>         return errno;
>       }
>      
>       delete[] temp;
>       return 0;
>     }
>     ```
>     This program tries to open a file `/xxx` which does not exist, and when I run it,
its exit code is 2 (i.e., `ENOENT`). And actually in stout I see there are also some other
codes using `delete` and `ErrnoError` in the same way, e.g.:
>     https://github.com/apache/mesos/blob/1.0.1/3rdparty/stout/include/stout/os/mktemp.hpp#L40:L41
>     https://github.com/apache/mesos/blob/1.0.1/3rdparty/stout/include/stout/os/posix/mkdtemp.hpp#L37:L38
>     
>     However, I do see there are also some codes which tries to avoid `delete` affecting
`ErrnoError` in this way:
>     ```
>     Error error = ErrnoError();
>     delete[] temp;
>     return error;
>     ```
>     https://github.com/apache/mesos/blob/1.0.1/3rdparty/stout/include/stout/os/read.hpp#L67:L69
>     https://github.com/apache/mesos/blob/1.0.1/3rdparty/stout/include/stout/os/sysctl.hpp#L200:L202
>     
>     
>     So the codes in stout are inconsistent regarding this issue. I think we should fix
it by making them handle this issue in a consistent way, I would prefer the following way:
>     ```
>     Error error = ErrnoError();
>     delete[] temp;
>     return error;
>     ```
>     
>     Let me know your comments :-)

I thought about it and I think that Qian Zhan is right that `delete` can't set `errno` because
it never fails. If there was an error, it would either throw or segv.


- James


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/53041/#review154042
-----------------------------------------------------------


On Oct. 25, 2016, 3:41 a.m., Qian Zhang wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/53041/
> -----------------------------------------------------------
> 
> (Updated Oct. 25, 2016, 3:41 a.m.)
> 
> 
> Review request for mesos and Jie Yu.
> 
> 
> Bugs: MESOS-6360
>     https://issues.apache.org/jira/browse/MESOS-6360
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> Added `setxattr()` and `getxattr()` in stout.
> 
> 
> Diffs
> -----
> 
>   3rdparty/stout/include/Makefile.am 1eb9c146d3eebacaea32e0f724d145f0c1dd676f 
>   3rdparty/stout/include/stout/os.hpp 96e8621b198a3ec4cce78e0a6ff5f271eda05ff1 
>   3rdparty/stout/include/stout/os/posix/xattr.hpp PRE-CREATION 
>   3rdparty/stout/include/stout/os/windows/xattr.hpp PRE-CREATION 
>   3rdparty/stout/include/stout/os/xattr.hpp PRE-CREATION 
> 
> Diff: https://reviews.apache.org/r/53041/diff/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Qian Zhang
> 
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message