Skip to content

Wasm and Websocket : already borrowed: BorrowMutError #5

@buxx

Description

@buxx

Hello,

Websocket with Wasm seems to have a bug. With the following code, I got the web browser error already borrowed: BorrowMutError.

Code to reproduce :

use macroquad::prelude::*;
use quad_net::web_socket::WebSocket;

#[macroquad::main("Networking!")]
async fn main() {
    let mut last_message = String::new();
    let mut first_message = true;
    let mut socket = WebSocket::connect("ws://echo.websocket.events").unwrap();

    loop {
        if socket.connected() {
            if first_message {
                let message = "Hello world";
                info!("Send message {}", message);
                socket.send_text(message);
                first_message = false;
            }
        }

        while let Some(data) = socket.try_recv() {
            last_message = String::from_utf8(data).unwrap();
        }
        draw_text(
            &format!("Last message received: '{}'", last_message),
            50.,
            50.,
            31.0,
            WHITE,
        );

        next_frame().await
    }
}

And "rapid" reproduction steps :

git clone https://github.com/buxx/demo.git
cd demo
git checkout demo-quad-net-ws
cargo build --target wasm32-unknown-unknown
basic-http-server .

Open page at http://127.0.0.1:4000, should see error :

PanicInfo { payload: Any { .. }, message: Some(already borrowed: BorrowMutError), location: Location { file: "/home/bastiensevajol/.cargo/registry/src/github.com-1ecc6299db9ec823/miniquad-0.3.11/src/native/wasm.rs", line: 95, col: 35 }, can_unwind: true } gl-0.1.19.js:1:10496

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions