-
-
Notifications
You must be signed in to change notification settings - Fork 22k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix modified_time
on Android
#103080
Fix modified_time
on Android
#103080
Conversation
33e3b03
to
ee0cebe
Compare
@syntaxerror247 Does this workaround also work on your device? Notice: My first pull request wasn't accepted, there were these check warnings for Android. All other operating systems were not affected. Error: drivers/unix/file_access_unix.cpp:348:21: error:
comparison of integers of different signs: 'uint64_t' (aka 'unsigned long') and
'__kernel_old_time_t' (aka 'long') [-Werror,-Wsign-compare]
if (modified_time < status.st_ctime) {
~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~
1 error generated.
scons: *** [drivers/unix/file_access_unix.android.editor.arm64.o] Error 1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Works as expected.
Thanks! |
// Workaround for GH-101007 | ||
//FIXME: After saving, all timestamps (st_mtime, st_ctime, st_atime) are set to the same value. | ||
// After exporting or after some time, only 'modified_time' resets to a past timestamp. | ||
uint64_t created_time = status.st_ctime; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
st_ctime
is not created_time
.
The effects need to be examined in more detail, a few days ago I noticed that this timestamp was updated outside of Godot.
alex@localhost godot-github % adb shell "stat sdcard/Documents/starter-kit-city-builder"
File: sdcard/Documents/starter-kit-city-builder
Size: 3488 Blocks: 7 IO Blocks: 512 directory
Device: 62h/98d Inode: 547529 Links: 11 Device type: 0,0
Access: (0770/drwxrwx---) Uid: ( 0/ root) Gid: ( 9997/everybody)
Access: 2024-07-21 13:06:31.602339129 +0200
Modify: 2024-07-21 13:06:48.914339123 +0200
Change: 2024-07-21 13:06:48.914339123 +0200
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
st_ctime
updated when files metadata updates. So, if its metadata is updated due to any reason st_ctime
would update. I thinks, it's not a problem for us as this would just create a new file_cache at export.
It is working in our usecase because when file is modified its size changes which probably triggers a st_ctime
update.
Fixes: #101007 (Workaround)
Issue Description:
After saving, all timestamps (
st_mtime, st_ctime, st_atime
) are set to the same value.After exporting or after some time, only
modified_time
resets to a past timestamp.Cache files are created during export and rely on
modified_time
.Workaround:
Use
created_time
ifmodified_time
is in the past.#101007 (comment)
I initially suspected
thirdparty/minizip/unzip.c
because the timestamps were only reset afterunz*
functions. However, this behavior also occurs when no export is performed, once even when the Godot Editor was not running (terminated).Test
screen-recording-20250220-161402_t6S8GUBK.mp4
timestamp check after export
After saving the time was still 16:xx and after export it was reset to 15:xx.