You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafficserver.apache.org by "Oknet Xu (JIRA)" <ji...@apache.org> on 2016/06/28 12:47:57 UTC

[jira] [Updated] (TS-4487) haven't check the change of lock after return from wbe callback

     [ https://issues.apache.org/jira/browse/TS-4487?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Oknet Xu updated TS-4487:
-------------------------
    Summary: haven't check the change of lock after return from wbe callback  (was: Don't reschedule read depend on needs & did not check the change of lock at the return callback with wbe.)

> haven't check the change of lock after return from wbe callback
> ---------------------------------------------------------------
>
>                 Key: TS-4487
>                 URL: https://issues.apache.org/jira/browse/TS-4487
>             Project: Traffic Server
>          Issue Type: Improvement
>          Components: SSL
>            Reporter: Oknet Xu
>            Assignee: Oknet Xu
>             Fix For: 7.0.0
>
>
> the code:
> {code}
> int64_t r = vc->load_buffer_and_write(towrite, wattempted, total_written, buf, needs);
> {code}
> At the end of write_to_net_io, 
> {code}
>     if (!buf.reader()->read_avail()) {  // should check needs==0
>       write_disable(nh, vc);
>       return;
>     }
>     if ((needs & EVENTIO_WRITE) == EVENTIO_WRITE) {
>       write_reschedule(nh, vc);
>     }
>     if ((needs & EVENTIO_READ) == EVENTIO_READ) {
>       read_reschedule(nh, vc);
>     }
>     return;
> {code}
> another issue in write_to_net_io(): did not check the change of lock at the return callback with wbe.
> {code}
>   if (s->vio.ntodo() <= 0) {
>     write_signal_done(VC_EVENT_WRITE_COMPLETE, nh, vc);
>     return;
>   } else if (signalled && (wbe_event != vc->write_buffer_empty_event)) {
>     // @a signalled means we won't send an event, and the event values differing means we
>     // had a write buffer trap and cleared it, so we need to send it now.
>     if (write_signal_and_update(wbe_event, vc) != EVENT_CONT)
>       return;
>     // ============> did not check the change of lock at the return callback with wbe.
>   } else if (!signalled) {
>     if (write_signal_and_update(VC_EVENT_WRITE_READY, vc) != EVENT_CONT) {
>       return;
>     }
>     // change of lock... don't look at shared variables!
>     if (lock.get_mutex() != s->vio.mutex.get()) {
>       write_reschedule(nh, vc);
>       return;
>     }
>   }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)