Uploaded image for project: 'Traffic Server'
  1. Traffic Server
  2. TS-4487

Haven't check the change of lock after return from wbe callback

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 7.0.0
    • SSL
    • None

    Description

      the code:

      int64_t r = vc->load_buffer_and_write(towrite, wattempted, total_written, buf, needs);
      

      At the end of write_to_net_io,

          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;
      

      another issue in write_to_net_io(): did not check the change of lock at the return callback with wbe.

        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;
          }
        }
      

      Attachments

        Activity

          People

            oknet Chao Xu
            oknet Chao Xu
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: