Merge pull request #3328 from matt335672/fix_time_calls

Remove/replace time calls
This commit is contained in:
matt335672
2025-01-06 10:22:40 +00:00
committed by GitHub
14 changed files with 76 additions and 115 deletions
+12 -56
View File
@@ -2045,18 +2045,6 @@ g_obj_wait(tintptr *read_objs, int rcount, tintptr *write_objs, int wcount,
void
g_random(char *data, int len)
{
#if defined(_WIN32)
int index;
srand(g_time1());
for (index = 0; index < len; index++)
{
data[index] = (char)rand(); /* rand returns a number between 0 and
RAND_MAX */
}
#else
int fd;
memset(data, 0x44, len);
@@ -2075,8 +2063,6 @@ g_random(char *data, int len)
close(fd);
}
#endif
}
/*****************************************************************************/
@@ -3779,51 +3765,21 @@ g_check_user_in_group(const char *username, int gid, int *ok)
#endif // HAVE_GETGROUPLIST
/*****************************************************************************/
/* returns the time since the Epoch (00:00:00 UTC, January 1, 1970),
measured in seconds.
for windows, returns the number of seconds since the machine was
started. */
int
g_time1(void)
unsigned int
g_get_elapsed_ms(void)
{
#if defined(_WIN32)
return GetTickCount() / 1000;
#else
return time(0);
#endif
}
unsigned int result = 0;
struct timespec tp;
/*****************************************************************************/
/* returns the number of milliseconds since the machine was
started. */
int
g_time2(void)
{
#if defined(_WIN32)
return (int)GetTickCount();
#else
struct tms tm;
clock_t num_ticks = 0;
g_memset(&tm, 0, sizeof(struct tms));
num_ticks = times(&tm);
return (int)(num_ticks * 10);
#endif
}
if (clock_gettime(CLOCK_MONOTONIC, &tp) == 0)
{
result = (unsigned int)tp.tv_sec * 1000;
// POSIX 1003.1-2004 specifies that tv_nsec is a long (i.e. a
// signed type), but can only contain [0..999,999,999]
result += tp.tv_nsec / 1000000;
}
/*****************************************************************************/
/* returns time in milliseconds, uses gettimeofday
does not work in win32 */
int
g_time3(void)
{
#if defined(_WIN32)
return 0;
#else
struct timeval tp;
gettimeofday(&tp, 0);
return (tp.tv_sec * 1000) + (tp.tv_usec / 1000);
#endif
return result;
}
/******************************************************************************/
+20 -3
View File
@@ -393,9 +393,26 @@ int g_getgroup_info(const char *groupname, int *gid);
* Primary group of username is also checked
*/
int g_check_user_in_group(const char *username, int gid, int *ok);
int g_time1(void);
int g_time2(void);
int g_time3(void);
/**
* Gets elapsed milliseconds since some arbitrary point in the past
*
* The returned value is unaffected by leap-seconds or time zone changes.
*
* @return elaped ms since some arbitrary point
*
* Calculate the duration of a task by calling this routine before and
* after the task, and subtracting the two values.
*
* The value wraps every so often (every 49.7 days on a 32-bit system),
* but as we are using unsigned arithmetic, the difference of any of these
* two values can be used to calculate elapsed time, whether-or-not a wrap
* occurs during the interval - provided of course the time being measured
* is less than the total wrap-around interval.
*/
unsigned int
g_get_elapsed_ms(void);
int g_save_to_bmp(const char *filename, char *data, int stride_bytes,
int width, int height, int depth, int bits_per_pixel);
void *g_shmat(int shmid);
+6 -6
View File
@@ -696,7 +696,7 @@ local_connect_shim(int fd, const char *server, const char *port)
/**************************************************************************//**
* Waits for an asynchronous connect to complete.
* @param self - Transport object
* @param start_time Start time of connect (from g_time3())
* @param start_time Start time of connect (from g_get_elapsed_ms())
* @param timeout Total wait timeout
* @return 0 - connect succeeded, 1 - Connect failed
*
@@ -704,10 +704,10 @@ local_connect_shim(int fd, const char *server, const char *port)
* on a regular basis.
*/
static int
poll_for_async_connect(struct trans *self, int start_time, int timeout)
poll_for_async_connect(struct trans *self, unsigned int start_time, int timeout)
{
int rv = 1;
int ms_remaining = timeout - (g_time3() - start_time);
int ms_remaining = timeout - (int)(g_get_elapsed_ms() - start_time);
while (ms_remaining > 0)
{
@@ -736,7 +736,7 @@ poll_for_async_connect(struct trans *self, int start_time, int timeout)
break;
}
ms_remaining = timeout - (g_time3() - start_time);
ms_remaining = timeout - (int)(g_get_elapsed_ms() - start_time);
}
return rv;
}
@@ -747,7 +747,7 @@ int
trans_connect(struct trans *self, const char *server, const char *port,
int timeout)
{
int start_time = g_time3();
unsigned int start_time = g_get_elapsed_ms();
int error;
int ms_before_next_connect;
@@ -826,7 +826,7 @@ trans_connect(struct trans *self, const char *server, const char *port,
}
/* Have we reached the total timeout yet? */
int ms_left = timeout - (g_time3() - start_time);
int ms_left = timeout - (int)(g_get_elapsed_ms() - start_time);
if (ms_left <= 0)
{
error = 1;
+3 -3
View File
@@ -132,7 +132,7 @@ add_timeout(int msoffset, void (*callback)(void *data), void *data)
tui32 now;
LOG_DEVEL(LOG_LEVEL_DEBUG, "add_timeout:");
now = g_time3();
now = g_get_elapsed_ms();
tobj = g_new0(struct timeout_obj, 1);
tobj->mstime = now + msoffset;
tobj->callback = callback;
@@ -167,7 +167,7 @@ get_timeout(int *timeout)
tobj = g_timeout_head;
if (tobj != 0)
{
now = g_time3();
now = g_get_elapsed_ms();
while (tobj != 0)
{
LOG_DEVEL(LOG_LEVEL_DEBUG, " now %u tobj->mstime %u", now, tobj->mstime);
@@ -215,7 +215,7 @@ check_timeout(void)
while (tobj != 0)
{
count++;
now = g_time3();
now = g_get_elapsed_ms();
if (now >= tobj->mstime)
{
tobj->callback(tobj->data);
+1 -1
View File
@@ -274,7 +274,7 @@ clipboard_get_file(const char *file, int bytes)
list_add_item(g_files_list, (tintptr)cfi);
cfi->size = g_file_get_size(full_fn);
cfi->flags = CB_FILE_ATTRIBUTE_ARCHIVE;
cfi->time = (g_time1() + CB_EPOCH_DIFF) * 10000000LL;
cfi->time = (time(NULL) + CB_EPOCH_DIFF) * 10000000LL;
LOG_DEVEL(LOG_LEVEL_DEBUG, "ok filename [%s] pathname [%s] size [%d]",
cfi->filename, cfi->pathname, cfi->size);
result = 0;
+12 -12
View File
@@ -71,7 +71,7 @@ static struct trans *g_audio_c_trans_out = 0; /* connection */
static struct trans *g_audio_l_trans_in = 0; /* listener */
static struct trans *g_audio_c_trans_in = 0; /* connection */
static int g_training_sent_time = 0;
static unsigned int g_training_sent_time = 0;
static int g_cBlockNo = 0;
static int g_bytes_in_stream = 0;
struct fifo *g_in_fifo;
@@ -86,7 +86,7 @@ static struct stream *g_stream_incoming_packet = NULL;
#define MAX_BBUF_SIZE (1024 * 16)
static char g_buffer[MAX_BBUF_SIZE];
static int g_buf_index = 0;
static int g_sent_time[256];
static unsigned int g_sent_time[256];
static int g_bbuf_size = 1024 * 8; /* may change later */
@@ -341,7 +341,7 @@ sound_send_training(void)
{
struct stream *s;
int bytes;
int time;
unsigned int time;
char *size_ptr;
make_stream(s);
@@ -349,7 +349,7 @@ sound_send_training(void)
out_uint16_le(s, SNDC_TRAINING);
size_ptr = s->p;
out_uint16_le(s, 0); /* size, set later */
time = g_time3();
time = g_get_elapsed_ms();
g_training_sent_time = time;
out_uint16_le(s, time);
out_uint16_le(s, 1024);
@@ -885,7 +885,7 @@ sound_send_wave_data_chunk(char *data, int data_bytes)
{
struct stream *s;
int bytes;
int time;
unsigned int time;
int format_index;
char *size_ptr;
@@ -912,7 +912,7 @@ sound_send_wave_data_chunk(char *data, int data_bytes)
out_uint16_le(s, SNDC_WAVE);
size_ptr = s->p;
out_uint16_le(s, 0); /* size, set later */
time = g_time3();
time = g_get_elapsed_ms();
out_uint16_le(s, time);
out_uint16_le(s, format_index); /* wFormatNo */
g_cBlockNo++;
@@ -1040,7 +1040,7 @@ sound_process_training(struct stream *s, int size)
{
int time_diff;
time_diff = g_time3() - g_training_sent_time;
time_diff = g_get_elapsed_ms() - g_training_sent_time;
LOG(LOG_LEVEL_INFO, "sound_process_training: round trip time %u", time_diff);
return 0;
}
@@ -1052,12 +1052,12 @@ sound_process_wave_confirm(struct stream *s, int size)
{
int wTimeStamp;
int cConfirmedBlockNo;
int time;
unsigned int time;
int time_diff;
int index;
int acc;
time = g_time3();
time = g_get_elapsed_ms();
in_uint16_le(s, wTimeStamp);
in_uint8(s, cConfirmedBlockNo);
time_diff = time - g_sent_time[cConfirmedBlockNo & 0xff];
@@ -1095,13 +1095,13 @@ static int
process_pcm_message(int id, int size, struct stream *s)
{
static int sending_silence = 0;
static int silence_start_time = 0;
static unsigned int silence_start_time = 0;
switch (id)
{
case 0:
if ((g_client_does_fdk_aac || g_client_does_mp3lame) && sending_silence)
{
if ((g_time3() - silence_start_time) < (int)g_cfg->msec_do_not_send)
if ((g_get_elapsed_ms() - silence_start_time) < g_cfg->msec_do_not_send)
{
/* do not send data within msec_do_not_send msec after SNDC_CLOSE is sent, to avoid stutter. setting from sesman.ini */
return 0;
@@ -1119,7 +1119,7 @@ process_pcm_message(int id, int size, struct stream *s)
if (buf != NULL)
{
int i;
silence_start_time = g_time3();
silence_start_time = g_get_elapsed_ms();
sending_silence = 1;
for (i = 0; i < send_silence_times; i++)
{
-11
View File
@@ -85,17 +85,6 @@ xcommon_fatal_handler(Display *dis)
return 0;
}
/*****************************************************************************/
/* returns time in milliseconds
this is like g_time2 in os_calls, but not milliseconds since machine was
up, something else
this is a time value similar to what the xserver uses */
int
xcommon_get_local_time(void)
{
return g_time3();
}
/******************************************************************************/
/* this should be called first */
int
-2
View File
@@ -28,8 +28,6 @@
typedef void (*x_server_fatal_cb_type)(void);
int
xcommon_get_local_time(void);
int
xcommon_init(void);
int
+3 -3
View File
@@ -225,7 +225,7 @@ auth_check_pwd_chg(const char *user)
}
/* check if we need a pwd change */
now = g_time1();
now = time(NULL);
today = now / SECS_PER_DAY;
if (stp->sp_expire == -1)
@@ -306,7 +306,7 @@ auth_change_pwd(const char *user, const char *newpwd)
}
stp->sp_pwdp = g_strdup(hash);
today = g_time1() / SECS_PER_DAY;
today = time(NULL) / SECS_PER_DAY;
stp->sp_lstchg = today;
stp->sp_expire = today + stp->sp_max + stp->sp_inact;
fd = fopen("/etc/shadow", "rw");
@@ -377,7 +377,7 @@ auth_account_disabled(struct spwd *stp)
return 1;
}
today = g_time1() / SECS_PER_DAY;
today = time(NULL) / SECS_PER_DAY;
LOG_DEVEL(LOG_LEVEL_DEBUG, "last %ld", stp->sp_lstchg);
LOG_DEVEL(LOG_LEVEL_DEBUG, "min %ld", stp->sp_min);
+2 -2
View File
@@ -57,8 +57,8 @@ log_authfail_message(const char *username, const char *ip_addr)
{
ip_addr = "unknown";
}
LOG(LOG_LEVEL_INFO, "AUTHFAIL: user=%s ip=%s time=%d",
username, ip_addr, g_time1());
LOG(LOG_LEVEL_INFO, "AUTHFAIL: user=%s ip=%s time=%ld",
username, ip_addr, (long)time(NULL));
}
/******************************************************************************/
+2 -2
View File
@@ -674,7 +674,7 @@ session_start_wrapped(struct login_info *login_info,
sd->win_mgr = window_manager_pid;
sd->x_server = display_pid;
sd->chansrv = chansrv_pid;
sd->start_time = g_time1();
sd->start_time = time(NULL);
status = E_SCP_SCREATE_OK;
}
}
@@ -860,7 +860,7 @@ session_process_child_exit(struct session_data *sd,
}
else if (pid == sd->win_mgr)
{
int wm_wait_time = g_time1() - sd->start_time;
int wm_wait_time = time(NULL) - sd->start_time;
if (e->reason == E_PXR_STATUS_CODE && e->val == 0)
{
+2 -2
View File
@@ -489,8 +489,8 @@ struct display_control_monitor_layout_data
{
struct display_size_description description;
enum display_resize_state state;
int last_state_update_timestamp;
int start_time;
unsigned int last_state_update_timestamp;
unsigned int start_time;
/// This flag is set if the state machine needs to
/// shutdown/startup EGFX
int using_egfx;
+12 -11
View File
@@ -1275,14 +1275,14 @@ advance_resize_state_machine(struct xrdp_mm *mm,
"advance_resize_state_machine:"
" Processing resize to: %d x %d."
" Advancing state from %s to %s."
" Previous state took %d MS.",
" Previous state took %u MS.",
description->description.session_width,
description->description.session_height,
XRDP_DISPLAY_RESIZE_STATE_TO_STR(description->state),
XRDP_DISPLAY_RESIZE_STATE_TO_STR(new_state),
g_time3() - description->last_state_update_timestamp);
g_get_elapsed_ms() - description->last_state_update_timestamp);
description->state = new_state;
description->last_state_update_timestamp = g_time3();
description->last_state_update_timestamp = g_get_elapsed_ms();
g_set_wait_obj(mm->resize_ready);
return 0;
}
@@ -1829,7 +1829,7 @@ process_display_control_monitor_layout_data(struct xrdp_wm *wm)
// ever is, advance the state machine!
if (chan->drdynvcs[mm->egfx->channel_id].status
== XRDP_DRDYNVC_STATUS_CLOSED
|| (g_time3() - description->last_state_update_timestamp) > 100)
|| (g_get_elapsed_ms() - description->last_state_update_timestamp) > 100)
{
advance_resize_state_machine(mm, WMRZ_EGFX_CONN_CLOSED);
break;
@@ -2045,7 +2045,7 @@ dynamic_monitor_process_queue(struct xrdp_mm *self)
g_malloc(LAYOUT_DATA_SIZE, 1);
g_memcpy(&(self->resize_data->description), queue_head,
sizeof(struct display_size_description));
const int time = g_time3();
const unsigned int time = g_get_elapsed_ms();
self->resize_data->start_time = time;
self->resize_data->last_state_update_timestamp = time;
self->resize_data->using_egfx = (self->egfx != NULL);
@@ -2072,10 +2072,10 @@ dynamic_monitor_process_queue(struct xrdp_mm *self)
if (self->resize_data->state == WMRZ_COMPLETE)
{
LOG(LOG_LEVEL_INFO, "dynamic_monitor_process_queue: Clearing"
" completed resize (w: %d x h: %d). It took %d milliseconds.",
" completed resize (w: %d x h: %d). It took %u milliseconds.",
self->resize_data->description.session_width,
self->resize_data->description.session_height,
g_time3() - self->resize_data->start_time);
g_get_elapsed_ms() - self->resize_data->start_time);
g_set_wait_obj(self->resize_ready);
}
else if (self->resize_data->state == WMRZ_ERROR)
@@ -3532,9 +3532,10 @@ xrdp_mm_get_wait_objs(struct xrdp_mm *self,
{
if (xrdp_region_not_empty(self->wm->screen_dirty_region))
{
int now = g_time3();
int next_screen_draw_time = self->wm->last_screen_draw_time +
MIN_MS_BETWEEN_FRAMES;
unsigned int now = g_get_elapsed_ms();
unsigned int next_screen_draw_time =
self->wm->last_screen_draw_time +
MIN_MS_BETWEEN_FRAMES;
int diff = next_screen_draw_time - now;
int ltimeout = *timeout;
diff = MAX(diff, MIN_MS_TO_WAIT_FOR_MORE_UPDATES);
@@ -3924,7 +3925,7 @@ xrdp_mm_check_wait_objs(struct xrdp_mm *self)
{
if (xrdp_region_not_empty(self->wm->screen_dirty_region))
{
int now = g_time3();
unsigned int now = g_get_elapsed_ms();
int diff = now - self->wm->last_screen_draw_time;
LOG_DEVEL(LOG_LEVEL_TRACE, "xrdp_mm_check_wait_objs: not empty diff %d", diff);
if ((diff < 0) || (diff >= 40))
+1 -1
View File
@@ -589,7 +589,7 @@ struct xrdp_wm
struct xrdp_tconfig_gfx *gfx_config;
struct xrdp_region *screen_dirty_region;
int last_screen_draw_time;
unsigned int last_screen_draw_time;
};
/* rdp process */