|
@@ -113,13 +113,16 @@ int l_websocket_callback(lua_State *L, void *ptr)
|
|
|
|
|
|
|
|
size_t new_len = websocket_ctrl->frame_buffer_len + pkg.plen;
|
|
size_t new_len = websocket_ctrl->frame_buffer_len + pkg.plen;
|
|
|
char *new_buf = luat_heap_realloc(websocket_ctrl->frame_buffer, new_len);
|
|
char *new_buf = luat_heap_realloc(websocket_ctrl->frame_buffer, new_len);
|
|
|
- if (!new_buf)
|
|
|
|
|
- {
|
|
|
|
|
- LLOGE("not continuation");
|
|
|
|
|
|
|
+ if (!new_buf) {
|
|
|
|
|
+ LLOGE("realloc failed for continuation frame");
|
|
|
luat_heap_free(raw);
|
|
luat_heap_free(raw);
|
|
|
|
|
+ luat_heap_free(websocket_ctrl->frame_buffer); // 释放旧内存
|
|
|
|
|
+ websocket_ctrl->frame_buffer = NULL;
|
|
|
|
|
+ websocket_ctrl->frame_buffer_len = 0;
|
|
|
|
|
+ websocket_ctrl->is_fragmenting = 0; // 重置状态
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
- websocket_ctrl->frame_buffer = new_buf;
|
|
|
|
|
|
|
+ websocket_ctrl->frame_buffer = new_buf; // 更新指针
|
|
|
memcpy(websocket_ctrl->frame_buffer + websocket_ctrl->frame_buffer_len,
|
|
memcpy(websocket_ctrl->frame_buffer + websocket_ctrl->frame_buffer_len,
|
|
|
pkg.payload, pkg.plen);
|
|
pkg.payload, pkg.plen);
|
|
|
websocket_ctrl->frame_buffer_len = new_len;
|
|
websocket_ctrl->frame_buffer_len = new_len;
|