[libcamera-devel] [PATCH] android: jpeg: exif: Use reentrant localtime_r()
Niklas Söderlund
niklas.soderlund at ragnatech.se
Thu Sep 10 12:20:26 CEST 2020
Hi Laurent,
Thanks for your work.
On 2020-09-10 07:14:59 +0300, Laurent Pinchart wrote:
> The std::localtime() function isn't thread-safe, and we have no
> guarantee whether other threads in the camera service may or may not
> call it. Replace it with localtime_r(). This requires switching from
> ctime to time.h, as there is no std::localtime_r() function.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> src/android/jpeg/exif.cpp | 6 ++++--
> src/android/jpeg/exif.h | 2 +-
> 2 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/src/android/jpeg/exif.cpp b/src/android/jpeg/exif.cpp
> index 1ced55343ee9..c0dbfcc216b9 100644
> --- a/src/android/jpeg/exif.cpp
> +++ b/src/android/jpeg/exif.cpp
> @@ -186,9 +186,11 @@ void Exif::setSize(const Size &size)
>
> void Exif::setTimestamp(time_t timestamp)
> {
> + struct tm tm;
> + localtime_r(×tamp, &tm);
> +
> char str[20];
> - std::strftime(str, sizeof(str), "%Y:%m:%d %H:%M:%S",
> - std::localtime(×tamp));
> + strftime(str, sizeof(str), "%Y:%m:%d %H:%M:%S", &tm);
> std::string ts(str);
>
> setString(EXIF_IFD_0, EXIF_TAG_DATE_TIME, EXIF_FORMAT_ASCII, ts);
> diff --git a/src/android/jpeg/exif.h b/src/android/jpeg/exif.h
> index 622de4cfd593..f04cefcea74a 100644
> --- a/src/android/jpeg/exif.h
> +++ b/src/android/jpeg/exif.h
> @@ -7,8 +7,8 @@
> #ifndef __ANDROID_JPEG_EXIF_H__
> #define __ANDROID_JPEG_EXIF_H__
>
> -#include <ctime>
> #include <string>
> +#include <time.h>
>
> #include <libexif/exif-data.h>
>
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list