You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I've been trying to build a client-server architecture with enet, I've been running into some problems. I'm aware that enet doesn't have multi-threaded support, and I want to build a small example that allows for usage of enet from a multi-threaded point of view, so far I have this code:
This is an example of multi-threaded usage of enet, WITHOUT any locking mechanisms. For example, when I run the server and two clients usually one of them segfaults (not immediately), with:
enet_list_remove (position=0x7ffff0001210) at /home/ccn/temp/enet_multithreaded/server/external_libraries/enet/list.c:37
37 position -> previous -> next = position -> next;
I don't really know what causes this problem, but I'm assuming it's the multi-threaded access of enet.
Would someone be willing to take a look at the code I linked to and propose a way to add mutex's to make it thread safe? I'm not quite sure how to approach it.
The structure of the client is that there is a send and receive thread, the sending thread simply creates a struct, puts it into a packet and then sends it with enet_host_flush(...) and the receive thread calls enet_host_service(...) over and over.
The structure of the server is pretty much the same, along with a process thread which sits between the receive and send, when InputSnapshot's come in from the client, they get put on a thread-safe queue, which is then intermittently drained from the process thread, which increments a global num_inputs_snapshots_processed counter, the send thread simply sends this number back to the client.
The general structure tries to mimic that of a multiplayer game, but in the smallest possible way.
The text was updated successfully, but these errors were encountered:
Hi there,
I've been trying to build a client-server architecture with enet, I've been running into some problems. I'm aware that enet doesn't have multi-threaded support, and I want to build a small example that allows for usage of enet from a multi-threaded point of view, so far I have this code:
https://github.com/cuppajoeman/mt_cs_enet
This is an example of multi-threaded usage of enet, WITHOUT any locking mechanisms. For example, when I run the server and two clients usually one of them segfaults (not immediately), with:
I don't really know what causes this problem, but I'm assuming it's the multi-threaded access of enet.
Would someone be willing to take a look at the code I linked to and propose a way to add mutex's to make it thread safe? I'm not quite sure how to approach it.
The files of interest are going to be:
The structure of the client is that there is a send and receive thread, the sending thread simply creates a struct, puts it into a packet and then sends it with
enet_host_flush(...)
and the receive thread callsenet_host_service(...)
over and over.The structure of the server is pretty much the same, along with a process thread which sits between the receive and send, when
InputSnapshot
's come in from the client, they get put on a thread-safe queue, which is then intermittently drained from the process thread, which increments a globalnum_inputs_snapshots_processed
counter, the send thread simply sends this number back to the client.The general structure tries to mimic that of a multiplayer game, but in the smallest possible way.
The text was updated successfully, but these errors were encountered: