From: compudj@krystal.dyndns.org (Mathieu Desnoyers)
Subject: [ltt-dev] [UST PATCH] remove duplicate return
Date: Mon, 6 Sep 2010 11:29:27 -0400 [thread overview]
Message-ID: <20100906152927.GA22968@Krystal> (raw)
In-Reply-To: <20100906024254.GA25072@Krystal>
* Mathieu Desnoyers (compudj at krystal.dyndns.org) wrote:
> * Pierre-Marc Fournier (pierre-marc.fournier at polymtl.ca) wrote:
> > I disagree with you Mathieu. These retvals are the same as i/o
> > syscalls (read/write/send/recv/...)and therefore should in my opinion
> > remain as is.
>
> Well, this function is not technically the same as i/o syscalls at all.
> It uses I/O syscalls, but it is not an I/O syscall per se, so the return
> value transformation to a more standard pattern (neg err val, 0 ok)
> should happen right in this function rather than to let all callers
> handle this. I/O syscalls use positive return values to indicate the
> number of bytes read/written/etc. Here, this function arbitrarily choose
> 1 to indicate that "something has been sent" without caring about the
> amount of data moved at all.
>
> So as it doesn't need the whole positive range to spell out the amount
> of data moved, it doesn't need to do the same special-cases that the I/O
> syscalls are doing. It adds a lot of error values management oddness
> without adding anything.
>
> So even though I agree with you that this function is close to the I/O
> system calls because it calls it, it is very far from the I/O syscalls
> semantically (we don't care about the number of bytes written), and even
> though we might be tempted to use the same error values as system calls
> for them, the fact that we just don't care about the number of bytes
> written combined with the fact that standardizing error value across the
> code makes it much easier to follow and to write just call for this
> change.
By the way, looking at include/share.h:patient_write(), in the case
where write returns 0, I think we should consider this as a success and
loop again to retry write rather than consider that an error occurred.
The same apply to patient_send(). See the manpages for details:
write(2):
RETURN VALUE
On success, the number of bytes written is returned (zero indicates
nothing was written). On error, -1 is returned, and errno is set
appropriately.
If count is zero and fd refers to a regular file, then write() may
return a failure status if one of the errors below is detected. If no
errors are detected, 0 will be returned without causing any other
effect. If count is zero and fd refers to a file other than a regular
file, the results are not specified.
send(2):
RETURN VALUE
On success, these calls return the number of characters sent. On
error, -1 is returned, and errno is set appropriately.
Thanks,
Mathieu
>
> Thanks,
>
> Mathieu
>
> >
> > pmf
> >
> > ----- Original message -----
> > > * Douglas Santos (douglas.santos at polymtl.ca) wrote:
> > > > ---
> > > > libustcmd/ustcmd.c |? ? ? 5 -----
> > > > 1 files changed, 0 insertions(+), 5 deletions(-)
> > > >
> > > > diff --git a/libustcmd/ustcmd.c b/libustcmd/ustcmd.c
> > > > index cf6b9d7..825a649 100644
> > > > --- a/libustcmd/ustcmd.c
> > > > +++ b/libustcmd/ustcmd.c
> > > > @@ -381,11 +381,6 @@ int ustcmd_get_cmsf(struct marker_status **cmsf,
> > > > const pid_t pid)??? ??? return -1;
> > > > ??? }
> > > >
> > > > -??? if (result != 1) {
> > > > -??? ??? ERR("error while getting markers list");
> > > > -??? ??? return -1;
> > > > -??? }
> > >
> > > Looks good, so
> > >
> > > Acked-by Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> > >
> > > but why on earth is ustcomm_send_request() returning:
> > >
> > > /*
> > >? * Return value:
> > >? *? ? 0: Success, but no reply because recv() returned 0
> > >? *? ? 1: Success
> > >? *? ? -1: Error
> > >? *
> > >? * On error, the error message is printed, except on
> > >? * ECONNRESET, which is normal when the application dies.
> > >? */
> > >
> > > Typical return values everywhere else in the project, in the Linux
> > > kernel, and in libs are:
> > >
> > > 0: success
> > > negative: errors.
> > > positive: used for a quantity counter
> > >
> > > So for ustcomm_send_request(), I recommend to remap the "return 0" to
> > > "return -ENODATA".? And to remap "return 1" to return 0, and update all
> > > callers to test for if (ret < 0) rather than if (ret != 1).
> > >
> > > If you ever need inspiration for error values, please refer to
> > > /usr/include/asm-generic/errno-base.h and
> > > /usr/include/asm-generic/errno.h
> > >
> > > Thanks,
> > >
> > > Mathieu
> > >
> > >
> > > > -
> > > > ??? tmp_cmsf = (struct marker_status *) malloc(sizeof(struct
> > > > marker_status) *??? ??? (ustcmd_count_nl(big_str) + 1));
> > > > ??? if (tmp_cmsf == NULL) {
> > > > --
> > > > 1.7.0.4
> > > >
> > > >
> > > > _______________________________________________
> > > > ltt-dev mailing list
> > > > ltt-dev at lists.casi.polymtl.ca
> > > > http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
> > > >
> > >
> > > --
> > > Mathieu Desnoyers
> > > Operating System Efficiency R&D Consultant
> > > EfficiOS Inc.
> > > http://www.efficios.com
> > >
> > > _______________________________________________
> > > ltt-dev mailing list
> > > ltt-dev at lists.casi.polymtl.ca
> > > http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
> >
> >
> > _______________________________________________
> > ltt-dev mailing list
> > ltt-dev at lists.casi.polymtl.ca
> > http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
>
> --
> Mathieu Desnoyers
> Operating System Efficiency R&D Consultant
> EfficiOS Inc.
> http://www.efficios.com
>
> _______________________________________________
> ltt-dev mailing list
> ltt-dev at lists.casi.polymtl.ca
> http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
>
--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com
next prev parent reply other threads:[~2010-09-06 15:29 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-05 23:26 Douglas Santos
2010-09-06 0:49 ` Mathieu Desnoyers
2010-09-06 1:03 ` Pierre-Marc Fournier
2010-09-06 2:42 ` Mathieu Desnoyers
2010-09-06 15:29 ` Mathieu Desnoyers [this message]
2010-09-06 20:14 ` Pierre-Marc Fournier
2010-09-07 15:43 ` Mathieu Desnoyers
2010-09-08 16:29 ` David Goulet
2010-09-08 16:40 ` Mathieu Desnoyers
2010-09-09 7:10 ` Pierre-Marc Fournier
2010-09-09 16:38 ` Mathieu Desnoyers
2010-09-09 17:05 ` David Goulet
2010-09-11 18:36 ` Nils Carlson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100906152927.GA22968@Krystal \
--to=compudj@krystal.dyndns.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox