aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZachary Michaels <mikezackles@gmail.com>2014-08-20 11:57:29 -0400
committerRiccardo Spagni <ric@spagni.net>2014-09-15 22:38:46 +0200
commit9db881864db916310c11270c1939db700689c9a3 (patch)
tree742b1cd07dde7581f9a3090698da29152cecf3ee /src
parentUse LTO by default (diff)
downloadmonero-9db881864db916310c11270c1939db700689c9a3.tar.xz
Fix time_t serialization issue
On 32-bit MinGW-w64, time_t is int32_t. The existing code was serializing time_t directly and implicitly assuming that time_t is int64_t. This commit formalizes that assumption by serializing int64_t directly and casting to time_t where appropriate. Thanks go to greatwolf for reporting this issue. monero-project/bitmonero#88
Diffstat (limited to 'src')
-rw-r--r--src/p2p/net_node.inl8
-rw-r--r--src/p2p/net_peerlist.h4
-rw-r--r--src/p2p/p2p_protocol_defs.h2
3 files changed, 9 insertions, 5 deletions
diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl
index 870e7572e..954d794b7 100644
--- a/src/p2p/net_node.inl
+++ b/src/p2p/net_node.inl
@@ -624,7 +624,9 @@ namespace nodetool
peerlist_entry pe_local = AUTO_VAL_INIT(pe_local);
pe_local.adr = na;
pe_local.id = pi;
- time(&pe_local.last_seen);
+ time_t last_seen;
+ time(&last_seen);
+ pe_local.last_seen = static_cast<int64_t>(last_seen);
m_peerlist.append_with_peer_white(pe_local);
//update last seen and push it to peerlist manager
@@ -1102,7 +1104,9 @@ namespace nodetool
peerlist_entry pe;
pe.adr.ip = context.m_remote_ip;
pe.adr.port = port_l;
- time(&pe.last_seen);
+ time_t last_seen;
+ time(&last_seen);
+ pe.last_seen = static_cast<int64_t>(last_seen);
pe.id = peer_id_l;
this->m_peerlist.append_with_peer_white(pe);
LOG_PRINT_CCONTEXT_L2("PING SUCCESS " << epee::string_tools::get_ip_string_from_int32(context.m_remote_ip) << ":" << port_l);
diff --git a/src/p2p/net_peerlist.h b/src/p2p/net_peerlist.h
index b02326905..e3e387bbc 100644
--- a/src/p2p/net_peerlist.h
+++ b/src/p2p/net_peerlist.h
@@ -128,7 +128,7 @@ namespace nodetool
// access by peerlist_entry::net_adress
boost::multi_index::ordered_unique<boost::multi_index::tag<by_addr>, boost::multi_index::member<peerlist_entry,net_address,&peerlist_entry::adr> >,
// sort by peerlist_entry::last_seen<
- boost::multi_index::ordered_non_unique<boost::multi_index::tag<by_time>, boost::multi_index::member<peerlist_entry,time_t,&peerlist_entry::last_seen> >
+ boost::multi_index::ordered_non_unique<boost::multi_index::tag<by_time>, boost::multi_index::member<peerlist_entry,int64_t,&peerlist_entry::last_seen> >
>
> peers_indexed;
@@ -140,7 +140,7 @@ namespace nodetool
// access by peerlist_entry::net_adress
boost::multi_index::ordered_unique<boost::multi_index::tag<by_addr>, boost::multi_index::member<peerlist_entry,net_address,&peerlist_entry::adr> >,
// sort by peerlist_entry::last_seen<
- boost::multi_index::ordered_non_unique<boost::multi_index::tag<by_time>, boost::multi_index::member<peerlist_entry,time_t,&peerlist_entry::last_seen> >
+ boost::multi_index::ordered_non_unique<boost::multi_index::tag<by_time>, boost::multi_index::member<peerlist_entry,int64_t,&peerlist_entry::last_seen> >
>
> peers_indexed_old;
public:
diff --git a/src/p2p/p2p_protocol_defs.h b/src/p2p/p2p_protocol_defs.h
index a14d00dcd..44b8c5b50 100644
--- a/src/p2p/p2p_protocol_defs.h
+++ b/src/p2p/p2p_protocol_defs.h
@@ -53,7 +53,7 @@ namespace nodetool
{
net_address adr;
peerid_type id;
- time_t last_seen;
+ int64_t last_seen;
};
struct connection_entry