[libsoup] http2: fix state change from write headers to write data



commit ebf90ab7ba41371a5102735386780a21b53f6f8c
Author: Carlos Garcia Campos <cgarcia igalia com>
Date:   Tue May 18 12:00:59 2021 +0200

    http2: fix state change from write headers to write data
    
    It's never happening now because on_before_frame_send_callback is not
    called for data frames.

 libsoup/http2/soup-client-message-io-http2.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
---
diff --git a/libsoup/http2/soup-client-message-io-http2.c b/libsoup/http2/soup-client-message-io-http2.c
index b5e2c7df..94e09fa3 100644
--- a/libsoup/http2/soup-client-message-io-http2.c
+++ b/libsoup/http2/soup-client-message-io-http2.c
@@ -484,9 +484,6 @@ on_before_frame_send_callback (nghttp2_session     *session,
         case NGHTTP2_HEADERS:
                 advance_state_from (data, STATE_NONE, STATE_WRITE_HEADERS);
                 break;
-        case NGHTTP2_DATA:
-                advance_state_from (data, STATE_WRITE_HEADERS, STATE_WRITE_DATA);
-                break;
         }
 
         return 0;
@@ -522,6 +519,8 @@ on_frame_send_callback (nghttp2_session     *session,
         case NGHTTP2_DATA:
                 h2_debug (user_data, data, "[SEND] [DATA] bytes=%zu, finished=%d",
                           frame->data.hd.length, frame->hd.flags & NGHTTP2_FLAG_END_STREAM);
+                if (data->state < STATE_WRITE_DATA)
+                        advance_state_from (data, STATE_WRITE_HEADERS, STATE_WRITE_DATA);
                 if (data->metrics) {
                         data->metrics->request_body_bytes_sent += frame->hd.length + FRAME_HEADER_SIZE;
                         data->metrics->request_body_size += frame->data.hd.length;
@@ -529,7 +528,7 @@ on_frame_send_callback (nghttp2_session     *session,
                 if (frame->data.hd.length)
                         soup_message_wrote_body_data (data->msg, frame->data.hd.length);
                 if (frame->hd.flags & NGHTTP2_FLAG_END_STREAM) {
-                        advance_state_from (data, STATE_ANY, STATE_WRITE_DONE);
+                        advance_state_from (data, STATE_WRITE_DATA, STATE_WRITE_DONE);
                         soup_message_wrote_body (data->msg);
                 }
                 break;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]