From 0e3c9029e1d022f2aadcac7c320b7c56069bc0c6 Mon Sep 17 00:00:00 2001 From: Dan Lambright Date: Thu, 13 Aug 2015 10:24:23 -0400 Subject: cluster/tier: fix 64 bit issue with sql query using times This is a backport of 11885. > We overflowed when converting seconds to usecs in preperation for > sql queries. The fix uses uint64_t throughout including subexpressions. > Change-Id: I59bdb742197400dede97f54735b52030920b0d19 > BUG: 1231268 > Signed-off-by: Dan Lambright Change-Id: Iaef7083dac7a162080f4bc23e29dedfe700fa342 BUG: 1252903 Signed-off-by: Dan Lambright Reviewed-on: http://review.gluster.org/11913 Tested-by: NetBSD Build System Reviewed-by: Joseph Fernandes --- libglusterfs/src/gfdb/gfdb_data_store_types.h | 4 ++-- libglusterfs/src/gfdb/gfdb_sqlite3.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'libglusterfs/src') diff --git a/libglusterfs/src/gfdb/gfdb_data_store_types.h b/libglusterfs/src/gfdb/gfdb_data_store_types.h index fb41c385808..f603254ed0d 100644 --- a/libglusterfs/src/gfdb/gfdb_data_store_types.h +++ b/libglusterfs/src/gfdb/gfdb_data_store_types.h @@ -89,11 +89,11 @@ typedef enum gf_db_operation { typedef struct timeval gfdb_time_t; /*Convert time into seconds*/ -static inline long int +static inline uint64_t gfdb_time_2_usec(gfdb_time_t *gfdb_time) { GF_ASSERT(gfdb_time); - return gfdb_time->tv_sec * GFDB_MICROSEC + gfdb_time->tv_usec; + return ((uint64_t) gfdb_time->tv_sec * GFDB_MICROSEC) + gfdb_time->tv_usec; } diff --git a/libglusterfs/src/gfdb/gfdb_sqlite3.c b/libglusterfs/src/gfdb/gfdb_sqlite3.c index 349ff60f541..611e0fdf745 100644 --- a/libglusterfs/src/gfdb/gfdb_sqlite3.c +++ b/libglusterfs/src/gfdb/gfdb_sqlite3.c @@ -665,7 +665,7 @@ gf_sqlite3_find_recently_changed_files(void *db_conn, char *query_str = NULL; gf_sql_connection_t *sql_conn = db_conn; sqlite3_stmt *prep_stmt = NULL; - long int from_time_usec = 0; + uint64_t from_time_usec = 0; CHECK_SQL_CONN (sql_conn, out); GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); @@ -750,7 +750,7 @@ gf_sqlite3_find_unchanged_for_time (void *db_conn, char *query_str = NULL; gf_sql_connection_t *sql_conn = db_conn; sqlite3_stmt *prep_stmt = NULL; - long int for_time_usec = 0; + uint64_t for_time_usec = 0; CHECK_SQL_CONN (sql_conn, out); GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); @@ -845,7 +845,7 @@ gf_sqlite3_find_recently_changed_files_freq (void *db_conn, char *query_str = NULL; gf_sql_connection_t *sql_conn = db_conn; sqlite3_stmt *prep_stmt = NULL; - long int from_time_usec = 0; + uint64_t from_time_usec = 0; CHECK_SQL_CONN (sql_conn, out); GF_VALIDATE_OR_GOTO(GFDB_STR_SQLITE3, query_callback, out); @@ -975,7 +975,7 @@ gf_sqlite3_find_unchanged_for_time_freq (void *db_conn, char *query_str = NULL; gf_sql_connection_t *sql_conn = db_conn; sqlite3_stmt *prep_stmt = NULL; - long int for_time_usec = 0; + uint64_t for_time_usec = 0; CHECK_SQL_CONN (sql_conn, out); GF_VALIDATE_OR_GOTO (GFDB_STR_SQLITE3, query_callback, out); -- cgit