[ https://issues.apache.org/jira/browse/TS-4487?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15360530#comment-15360530 ]
ASF subversion and git services commented on TS-4487: ----------------------------------------------------- Commit b9f16f2b4f14cd3aaac13f562dcf413617b20bda in trafficserver's branch refs/heads/master from [~shinrich] [ https://git-wip-us.apache.org/repos/asf?p=trafficserver.git;h=b9f16f2 ] Merge pull request #754 from oknet/TS-4487 TS-4487: check the change of lock after return from wbe callback > 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)