Re: [PATCH v2 2/4] rsockets: retry for completion events upon interruption

Jason Gunthorpe
2014-09-17T22:13:40Z

On Wed, Sep 17, 2014 at 04:27:05PM +0000, Hefty, Sean wrote:
> > +resume_get_cq_event:
> > ret = ibv_get_cq_event(rs->cm_id->recv_cq_channel, &cq, &context);
> > if (!ret) {
> > ibv_ack_cq_events(rs->cm_id->recv_cq, 1);
> > rs->cq_armed = 0;
> > + } else if (restart_onintr == 1 && errno == EINTR) {
> > + errno = 0;
> > + goto resume_get_cq_event;
>
> I'm not convinced that this is desirable behavior. If the thread
> waiting for an event was interrupted, why does it make sense to
> ignore the interrupt and return to waiting? Couldn't the app detect
> the return code and call back into rsockets in this case?

More broadly, it doesn't make sense for a library to check EINTR in
one place without also checking every blocking syscall it makes.

Realistically, apps that want to use signals in this way will need to
see the EINTR at the app level, while apps that don't care should be
using SA_RESTART to prevent EINTR from being generated.

Jason