Merge pull request #8734 from Faless/various_2.1_cherries
Various 2.1 cherry picks
This commit is contained in:
commit
caeee17846
@ -104,19 +104,21 @@ int Compression::get_max_compressed_buffer_size(int p_src_size, Mode p_mode) {
|
||||
ERR_FAIL_V(-1);
|
||||
}
|
||||
|
||||
void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size, Mode p_mode) {
|
||||
int Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size, Mode p_mode) {
|
||||
|
||||
switch (p_mode) {
|
||||
case MODE_FASTLZ: {
|
||||
|
||||
int ret_size=0;
|
||||
|
||||
if (p_dst_max_size < 16) {
|
||||
uint8_t dst[16];
|
||||
fastlz_decompress(p_src, p_src_size, dst, 16);
|
||||
ret_size = fastlz_decompress(p_src, p_src_size, dst, 16);
|
||||
copymem(p_dst, dst, p_dst_max_size);
|
||||
} else {
|
||||
fastlz_decompress(p_src, p_src_size, p_dst, p_dst_max_size);
|
||||
ret_size = fastlz_decompress(p_src, p_src_size, p_dst, p_dst_max_size);
|
||||
}
|
||||
return;
|
||||
return ret_size;
|
||||
} break;
|
||||
case MODE_DEFLATE: {
|
||||
|
||||
@ -127,7 +129,7 @@ void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *
|
||||
strm.avail_in = 0;
|
||||
strm.next_in = Z_NULL;
|
||||
int err = inflateInit(&strm);
|
||||
ERR_FAIL_COND(err != Z_OK);
|
||||
ERR_FAIL_COND_V(err != Z_OK, -1);
|
||||
|
||||
strm.avail_in = p_src_size;
|
||||
strm.avail_out = p_dst_max_size;
|
||||
@ -135,11 +137,12 @@ void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *
|
||||
strm.next_out = p_dst;
|
||||
|
||||
err = inflate(&strm, Z_FINISH);
|
||||
int total = strm.total_out;
|
||||
inflateEnd(&strm);
|
||||
ERR_FAIL_COND(err != Z_STREAM_END);
|
||||
return;
|
||||
ERR_FAIL_COND_V(err != Z_STREAM_END, -1);
|
||||
return total;
|
||||
} break;
|
||||
}
|
||||
|
||||
ERR_FAIL();
|
||||
ERR_FAIL_V(-1);
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ public:
|
||||
|
||||
static int compress(uint8_t *p_dst, const uint8_t *p_src, int p_src_size, Mode p_mode = MODE_FASTLZ);
|
||||
static int get_max_compressed_buffer_size(int p_src_size, Mode p_mode = MODE_FASTLZ);
|
||||
static void decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size, Mode p_mode = MODE_FASTLZ);
|
||||
static int decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size, Mode p_mode = MODE_FASTLZ);
|
||||
|
||||
Compression();
|
||||
};
|
||||
|
@ -32,6 +32,11 @@
|
||||
|
||||
PacketPeerUDP *(*PacketPeerUDP::_create)() = NULL;
|
||||
|
||||
void PacketPeerUDP::set_blocking_mode(bool p_enable) {
|
||||
|
||||
blocking = p_enable;
|
||||
}
|
||||
|
||||
String PacketPeerUDP::_get_packet_ip() const {
|
||||
|
||||
return get_packet_address();
|
||||
@ -79,4 +84,6 @@ PacketPeerUDP *PacketPeerUDP::create() {
|
||||
}
|
||||
|
||||
PacketPeerUDP::PacketPeerUDP() {
|
||||
|
||||
blocking = true;
|
||||
}
|
||||
|
@ -37,6 +37,8 @@ class PacketPeerUDP : public PacketPeer {
|
||||
OBJ_TYPE(PacketPeerUDP, PacketPeer);
|
||||
|
||||
protected:
|
||||
bool blocking;
|
||||
|
||||
static PacketPeerUDP *(*_create)();
|
||||
static void _bind_methods();
|
||||
|
||||
@ -45,6 +47,8 @@ protected:
|
||||
Error _set_send_address(const String &p_address, int p_port);
|
||||
|
||||
public:
|
||||
void set_blocking_mode(bool p_enable);
|
||||
|
||||
virtual Error listen(int p_port, IP_Address p_bind_address = IP_Address("*"), int p_recv_buffer_size = 65536) = 0;
|
||||
virtual void close() = 0;
|
||||
virtual Error wait() = 0;
|
||||
|
@ -49,9 +49,10 @@ Error MessageQueue::push_call(ObjectID p_id, const StringName &p_method, const V
|
||||
type = ObjectDB::get_instance(p_id)->get_type();
|
||||
print_line("failed method: " + type + ":" + p_method + " target ID: " + itos(p_id));
|
||||
statistics();
|
||||
ERR_EXPLAIN("Message queue out of memory. Try increasing 'message_queue_size_kb' in project settings");
|
||||
ERR_FAIL_V(ERR_OUT_OF_MEMORY);
|
||||
}
|
||||
|
||||
ERR_FAIL_COND_V((buffer_end + room_needed) >= buffer_size, ERR_OUT_OF_MEMORY);
|
||||
Message *msg = memnew_placement(&buffer[buffer_end], Message);
|
||||
msg->args = p_argcount;
|
||||
msg->instance_ID = p_id;
|
||||
@ -99,10 +100,10 @@ Error MessageQueue::push_set(ObjectID p_id, const StringName &p_prop, const Vari
|
||||
type = ObjectDB::get_instance(p_id)->get_type();
|
||||
print_line("failed set: " + type + ":" + p_prop + " target ID: " + itos(p_id));
|
||||
statistics();
|
||||
ERR_EXPLAIN("Message queue out of memory. Try increasing 'message_queue_size_kb' in project settings");
|
||||
ERR_FAIL_V(ERR_OUT_OF_MEMORY);
|
||||
}
|
||||
|
||||
ERR_FAIL_COND_V((buffer_end + room_needed) >= buffer_size, ERR_OUT_OF_MEMORY);
|
||||
|
||||
Message *msg = memnew_placement(&buffer[buffer_end], Message);
|
||||
msg->args = 1;
|
||||
msg->instance_ID = p_id;
|
||||
@ -132,9 +133,10 @@ Error MessageQueue::push_notification(ObjectID p_id, int p_notification) {
|
||||
type = ObjectDB::get_instance(p_id)->get_type();
|
||||
print_line("failed notification: " + itos(p_notification) + " target ID: " + itos(p_id));
|
||||
statistics();
|
||||
ERR_EXPLAIN("Message queue out of memory. Try increasing 'message_queue_size_kb' in project settings");
|
||||
ERR_FAIL_V(ERR_OUT_OF_MEMORY);
|
||||
}
|
||||
|
||||
ERR_FAIL_COND_V((buffer_end + room_needed) >= buffer_size, ERR_OUT_OF_MEMORY);
|
||||
Message *msg = memnew_placement(&buffer[buffer_end], Message);
|
||||
|
||||
msg->type = TYPE_NOTIFICATION;
|
||||
|
@ -77,7 +77,7 @@ static IP_Address _sockaddr2ip(struct sockaddr *p_addr) {
|
||||
if (p_addr->sa_family == AF_INET) {
|
||||
struct sockaddr_in *addr = (struct sockaddr_in *)p_addr;
|
||||
ip.set_ipv4((uint8_t *)&(addr->sin_addr));
|
||||
} else {
|
||||
} else if (p_addr->sa_family == AF_INET6) {
|
||||
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)p_addr;
|
||||
ip.set_ipv6(addr6->sin6_addr.s6_addr);
|
||||
};
|
||||
@ -180,15 +180,16 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const {
|
||||
SOCKADDR_IN *ipv4 = reinterpret_cast<SOCKADDR_IN *>(address->Address.lpSockaddr);
|
||||
|
||||
ip.set_ipv4((uint8_t *)&(ipv4->sin_addr));
|
||||
} else { // ipv6
|
||||
r_addresses->push_back(ip);
|
||||
|
||||
} else if (address->Address.lpSockaddr->sa_family == AF_INET6) { // ipv6
|
||||
|
||||
SOCKADDR_IN6 *ipv6 = reinterpret_cast<SOCKADDR_IN6 *>(address->Address.lpSockaddr);
|
||||
|
||||
ip.set_ipv6(ipv6->sin6_addr.s6_addr);
|
||||
r_addresses->push_back(ip);
|
||||
};
|
||||
|
||||
r_addresses->push_back(ip);
|
||||
|
||||
address = address->Next;
|
||||
};
|
||||
adapter = adapter->Next;
|
||||
@ -205,6 +206,7 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const {
|
||||
|
||||
struct ifaddrs *ifAddrStruct = NULL;
|
||||
struct ifaddrs *ifa = NULL;
|
||||
int family;
|
||||
|
||||
getifaddrs(&ifAddrStruct);
|
||||
|
||||
@ -212,6 +214,11 @@ void IP_Unix::get_local_addresses(List<IP_Address> *r_addresses) const {
|
||||
if (!ifa->ifa_addr)
|
||||
continue;
|
||||
|
||||
family = ifa->ifa_addr->sa_family;
|
||||
|
||||
if (family != AF_INET && family != AF_INET6)
|
||||
continue;
|
||||
|
||||
IP_Address ip = _sockaddr2ip(ifa->ifa_addr);
|
||||
r_addresses->push_back(ip);
|
||||
}
|
||||
|
@ -108,10 +108,14 @@ Error PacketPeerUDPPosix::put_packet(const uint8_t *p_buffer, int p_buffer_size)
|
||||
errno = 0;
|
||||
int err;
|
||||
|
||||
_set_sock_blocking(blocking);
|
||||
|
||||
while ((err = sendto(sock, p_buffer, p_buffer_size, 0, (struct sockaddr *)&addr, addr_size)) != p_buffer_size) {
|
||||
|
||||
if (errno != EAGAIN) {
|
||||
return FAILED;
|
||||
} else if (!blocking) {
|
||||
return ERR_UNAVAILABLE;
|
||||
}
|
||||
}
|
||||
|
||||
@ -174,10 +178,12 @@ Error PacketPeerUDPPosix::_poll(bool p_wait) {
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
_set_sock_blocking(p_wait);
|
||||
|
||||
struct sockaddr_storage from = { 0 };
|
||||
socklen_t len = sizeof(struct sockaddr_storage);
|
||||
int ret;
|
||||
while ((ret = recvfrom(sockfd, recv_buffer, MIN((int)sizeof(recv_buffer), MAX(rb.space_left() - 24, 0)), p_wait ? 0 : MSG_DONTWAIT, (struct sockaddr *)&from, &len)) > 0) {
|
||||
while ((ret = recvfrom(sockfd, recv_buffer, MIN((int)sizeof(recv_buffer), MAX(rb.space_left() - 24, 0)), 0, (struct sockaddr *)&from, &len)) > 0) {
|
||||
|
||||
uint32_t port = 0;
|
||||
|
||||
@ -210,6 +216,8 @@ Error PacketPeerUDPPosix::_poll(bool p_wait) {
|
||||
|
||||
len = sizeof(struct sockaddr_storage);
|
||||
++queue_count;
|
||||
if (p_wait)
|
||||
break;
|
||||
};
|
||||
|
||||
// TODO: Should ECONNRESET be handled here?
|
||||
@ -244,9 +252,35 @@ int PacketPeerUDPPosix::_get_socket() {
|
||||
|
||||
sockfd = _socket_create(sock_type, SOCK_DGRAM, IPPROTO_UDP);
|
||||
|
||||
if (sockfd != -1)
|
||||
_set_sock_blocking(false);
|
||||
|
||||
return sockfd;
|
||||
}
|
||||
|
||||
void PacketPeerUDPPosix::_set_sock_blocking(bool p_blocking) {
|
||||
|
||||
if (sock_blocking == p_blocking)
|
||||
return;
|
||||
|
||||
sock_blocking = p_blocking;
|
||||
|
||||
#ifndef NO_FCNTL
|
||||
int opts = fcntl(sockfd, F_GETFL);
|
||||
int ret = 0;
|
||||
if (sock_blocking)
|
||||
ret = fcntl(sockfd, F_SETFL, opts & ~O_NONBLOCK);
|
||||
else
|
||||
ret = fcntl(sockfd, F_SETFL, opts | O_NONBLOCK);
|
||||
if (ret == -1)
|
||||
perror("setting non-block mode");
|
||||
#else
|
||||
int bval = sock_blocking ? 0 : 1;
|
||||
if (ioctl(sockfd, FIONBIO, &bval) == -1)
|
||||
perror("setting non-block mode");
|
||||
#endif
|
||||
}
|
||||
|
||||
void PacketPeerUDPPosix::set_send_address(const IP_Address &p_address, int p_port) {
|
||||
|
||||
peer_addr = p_address;
|
||||
@ -265,6 +299,8 @@ void PacketPeerUDPPosix::make_default() {
|
||||
|
||||
PacketPeerUDPPosix::PacketPeerUDPPosix() {
|
||||
|
||||
blocking = true;
|
||||
sock_blocking = true;
|
||||
sockfd = -1;
|
||||
packet_port = 0;
|
||||
queue_count = 0;
|
||||
|
@ -48,6 +48,7 @@ class PacketPeerUDPPosix : public PacketPeerUDP {
|
||||
mutable int packet_port;
|
||||
mutable int queue_count;
|
||||
int sockfd;
|
||||
bool sock_blocking;
|
||||
IP::Type sock_type;
|
||||
|
||||
IP_Address peer_addr;
|
||||
@ -56,6 +57,7 @@ class PacketPeerUDPPosix : public PacketPeerUDP {
|
||||
_FORCE_INLINE_ int _get_socket();
|
||||
|
||||
static PacketPeerUDP *_create();
|
||||
void _set_sock_blocking(bool p_blocking);
|
||||
virtual Error _poll(bool p_block);
|
||||
|
||||
public:
|
||||
|
@ -71,13 +71,21 @@ static size_t _set_listen_sockaddr(struct sockaddr_storage *p_addr, int p_port,
|
||||
};
|
||||
};
|
||||
|
||||
static int _socket_create(IP::Type p_type, int type, int protocol) {
|
||||
static int _socket_create(IP::Type &p_type, int type, int protocol) {
|
||||
|
||||
ERR_FAIL_COND_V(p_type > IP::TYPE_ANY || p_type < IP::TYPE_NONE, ERR_INVALID_PARAMETER);
|
||||
|
||||
int family = p_type == IP::TYPE_IPV4 ? AF_INET : AF_INET6;
|
||||
int sockfd = socket(family, type, protocol);
|
||||
|
||||
if (sockfd == -1 && p_type == IP::TYPE_ANY) {
|
||||
// Careful here, changing the referenced parameter so the caller knows that we are using an IPv4 socket
|
||||
// in place of a dual stack one, and further calls to _set_sock_addr will work as expected.
|
||||
p_type = IP::TYPE_IPV4;
|
||||
family = AF_INET;
|
||||
sockfd = socket(family, type, protocol);
|
||||
}
|
||||
|
||||
ERR_FAIL_COND_V(sockfd == -1, -1);
|
||||
|
||||
if (family == AF_INET6) {
|
||||
|
@ -1047,7 +1047,7 @@ void EditorExportPlatform::gen_export_flags(Vector<String> &r_flags, int p_flags
|
||||
|
||||
r_flags.push_back("-rdebug");
|
||||
|
||||
r_flags.push_back(host + ":" + String::num(GLOBAL_DEF("debug/debug_port", 6007)));
|
||||
r_flags.push_back(host + ":" + String::num(GLOBAL_DEF("network/debug_port", 6007)));
|
||||
|
||||
List<String> breakpoints;
|
||||
ScriptEditor::get_singleton()->get_breakpoints(&breakpoints);
|
||||
|
@ -40,6 +40,7 @@ Error EditorRun::run(const String &p_scene, const String p_custom_args, const Li
|
||||
List<String> args;
|
||||
|
||||
String resource_path = Globals::get_singleton()->get_resource_path();
|
||||
String remote_host = EditorSettings::get_singleton()->get("network/debug_host");
|
||||
|
||||
if (resource_path != "") {
|
||||
args.push_back("-path");
|
||||
@ -48,13 +49,7 @@ Error EditorRun::run(const String &p_scene, const String p_custom_args, const Li
|
||||
|
||||
if (true) {
|
||||
args.push_back("-rdebug");
|
||||
#ifdef WINDOWS_ENABLED
|
||||
// Avoid failing DNS lookup on disconnected Windows machines.
|
||||
const char *debug_host = "127.0.0.1:";
|
||||
#else
|
||||
const char *debug_host = "localhost:";
|
||||
#endif
|
||||
args.push_back(debug_host + String::num(GLOBAL_DEF("debug/debug_port", 6007)));
|
||||
args.push_back(remote_host + ":" + String::num(GLOBAL_DEF("network/debug_port", 6007)));
|
||||
}
|
||||
|
||||
args.push_back("-epid");
|
||||
|
@ -413,12 +413,11 @@ void EditorSettings::setup_network() {
|
||||
String lip;
|
||||
String hint;
|
||||
String current = get("network/debug_host");
|
||||
int port = has("network/debug_port") ? (int)get("network/debug_port") : 6007;
|
||||
|
||||
for (List<IP_Address>::Element *E = local_ip.front(); E; E = E->next()) {
|
||||
|
||||
String ip = E->get();
|
||||
if (ip == "127.0.0.1")
|
||||
continue;
|
||||
|
||||
if (lip == "")
|
||||
lip = ip;
|
||||
@ -431,6 +430,9 @@ void EditorSettings::setup_network() {
|
||||
|
||||
set("network/debug_host", lip);
|
||||
add_property_hint(PropertyInfo(Variant::STRING, "network/debug_host", PROPERTY_HINT_ENUM, hint));
|
||||
|
||||
set("network/debug_port", port);
|
||||
add_property_hint(PropertyInfo(Variant::INT, "network/debug_port", PROPERTY_HINT_RANGE, "1,65535,1"));
|
||||
}
|
||||
|
||||
void EditorSettings::save() {
|
||||
|
@ -37,7 +37,6 @@
|
||||
#include "os/file_access.h"
|
||||
#include "os/input.h"
|
||||
#include "os/keyboard.h"
|
||||
#include "os/keyboard.h"
|
||||
#include "os/os.h"
|
||||
#include "scene/main/viewport.h"
|
||||
|
||||
@ -2158,8 +2157,6 @@ void ScriptEditor::_editor_play() {
|
||||
debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_STEP), true);
|
||||
debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_BREAK), false);
|
||||
debug_menu->get_popup()->set_item_disabled(debug_menu->get_popup()->get_item_index(DEBUG_CONTINUE), true);
|
||||
|
||||
//debugger_gui->start_listening(Globals::get_singleton()->get("debug/debug_port"));
|
||||
}
|
||||
|
||||
void ScriptEditor::_editor_pause() {
|
||||
|
@ -564,8 +564,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
|
||||
ScriptDebuggerRemote *sdr = memnew(ScriptDebuggerRemote);
|
||||
uint16_t debug_port = GLOBAL_DEF("debug/remote_port", 6007);
|
||||
if (debug_host.find(":") != -1) {
|
||||
debug_port = debug_host.get_slicec(':', 1).to_int();
|
||||
debug_host = debug_host.get_slicec(':', 0);
|
||||
int sep_pos = debug_host.find_last(":");
|
||||
debug_port = debug_host.substr(sep_pos + 1, debug_host.length()).to_int();
|
||||
debug_host = debug_host.substr(0, sep_pos);
|
||||
}
|
||||
Error derr = sdr->connect_to_host(debug_host, debug_port);
|
||||
|
||||
|
@ -1651,7 +1651,7 @@ Error EditorExportPlatformAndroid::run(int p_device, int p_flags) {
|
||||
args.push_back("--remove-all");
|
||||
err = OS::get_singleton()->execute(adb, args, true, NULL, NULL, &rv);
|
||||
|
||||
int port = Globals::get_singleton()->get("debug/debug_port");
|
||||
int port = Globals::get_singleton()->get("network/debug_port");
|
||||
args.clear();
|
||||
args.push_back("reverse");
|
||||
args.push_back("tcp:" + itos(port));
|
||||
|
@ -83,7 +83,7 @@ Error PacketPeerUDPWinsock::put_packet(const uint8_t *p_buffer, int p_buffer_siz
|
||||
struct sockaddr_storage addr;
|
||||
size_t addr_size = _set_sockaddr(&addr, peer_addr, peer_port, sock_type);
|
||||
|
||||
_set_blocking(true);
|
||||
_set_sock_blocking(blocking);
|
||||
|
||||
errno = 0;
|
||||
int err;
|
||||
@ -91,7 +91,9 @@ Error PacketPeerUDPWinsock::put_packet(const uint8_t *p_buffer, int p_buffer_siz
|
||||
|
||||
if (WSAGetLastError() != WSAEWOULDBLOCK) {
|
||||
return FAILED;
|
||||
};
|
||||
} else if (!blocking) {
|
||||
return ERR_UNAVAILABLE;
|
||||
}
|
||||
}
|
||||
|
||||
return OK;
|
||||
@ -102,15 +104,13 @@ int PacketPeerUDPWinsock::get_max_packet_size() const {
|
||||
return 512; // uhm maybe not
|
||||
}
|
||||
|
||||
void PacketPeerUDPWinsock::_set_blocking(bool p_blocking) {
|
||||
//am no windows expert
|
||||
//hope this is the right thing
|
||||
void PacketPeerUDPWinsock::_set_sock_blocking(bool p_blocking) {
|
||||
|
||||
if (blocking == p_blocking)
|
||||
if (sock_blocking == p_blocking)
|
||||
return;
|
||||
|
||||
blocking = p_blocking;
|
||||
unsigned long par = blocking ? 0 : 1;
|
||||
sock_blocking = p_blocking;
|
||||
unsigned long par = sock_blocking ? 0 : 1;
|
||||
if (ioctlsocket(sockfd, FIONBIO, &par)) {
|
||||
perror("setting non-block mode");
|
||||
//close();
|
||||
@ -140,8 +140,6 @@ Error PacketPeerUDPWinsock::listen(int p_port, IP_Address p_bind_address, int p_
|
||||
return ERR_UNAVAILABLE;
|
||||
}
|
||||
|
||||
blocking = true;
|
||||
|
||||
printf("UDP Connection listening on port %i\n", p_port);
|
||||
rb.resize(nearest_shift(p_recv_buffer_size));
|
||||
return OK;
|
||||
@ -167,7 +165,7 @@ Error PacketPeerUDPWinsock::_poll(bool p_wait) {
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
_set_blocking(p_wait);
|
||||
_set_sock_blocking(p_wait);
|
||||
|
||||
struct sockaddr_storage from = { 0 };
|
||||
int len = sizeof(struct sockaddr_storage);
|
||||
@ -205,6 +203,8 @@ Error PacketPeerUDPWinsock::_poll(bool p_wait) {
|
||||
|
||||
len = sizeof(struct sockaddr_storage);
|
||||
++queue_count;
|
||||
if (p_wait)
|
||||
break;
|
||||
};
|
||||
|
||||
if (ret == SOCKET_ERROR) {
|
||||
@ -253,6 +253,9 @@ int PacketPeerUDPWinsock::_get_socket() {
|
||||
|
||||
sockfd = _socket_create(sock_type, SOCK_DGRAM, IPPROTO_UDP);
|
||||
|
||||
if (sockfd != -1)
|
||||
_set_sock_blocking(false);
|
||||
|
||||
return sockfd;
|
||||
}
|
||||
|
||||
@ -274,6 +277,8 @@ PacketPeerUDP *PacketPeerUDPWinsock::_create() {
|
||||
|
||||
PacketPeerUDPWinsock::PacketPeerUDPWinsock() {
|
||||
|
||||
blocking = true;
|
||||
sock_blocking = true;
|
||||
sockfd = -1;
|
||||
packet_port = 0;
|
||||
queue_count = 0;
|
||||
|
@ -46,6 +46,7 @@ class PacketPeerUDPWinsock : public PacketPeerUDP {
|
||||
mutable int packet_port;
|
||||
mutable int queue_count;
|
||||
int sockfd;
|
||||
bool sock_blocking;
|
||||
IP::Type sock_type;
|
||||
|
||||
IP_Address peer_addr;
|
||||
@ -55,8 +56,7 @@ class PacketPeerUDPWinsock : public PacketPeerUDP {
|
||||
|
||||
static PacketPeerUDP *_create();
|
||||
|
||||
bool blocking;
|
||||
void _set_blocking(bool p_blocking);
|
||||
void _set_sock_blocking(bool p_blocking);
|
||||
|
||||
Error _poll(bool p_wait);
|
||||
|
||||
|
@ -382,7 +382,7 @@ Node::PauseMode Node::get_pause_mode() const {
|
||||
|
||||
void Node::_propagate_pause_owner(Node *p_owner) {
|
||||
|
||||
if (data.pause_mode != PAUSE_MODE_INHERIT)
|
||||
if (this != p_owner && data.pause_mode != PAUSE_MODE_INHERIT)
|
||||
return;
|
||||
data.pause_owner = p_owner;
|
||||
for (int i = 0; i < data.children.size(); i++) {
|
||||
|
Loading…
Reference in New Issue
Block a user