Initialize mutexes for static builds for win32

Submitted by Alexander Täschner on June 7, 2017, 2:01 p.m.

Details

Message ID CAAfZOfok-9vP6EY-mE8T3yCnJK3DwO2BVzamdeKqWyqJydBkJA@mail.gmail.com
State New
Headers show
Series "Initialize mutexes for static builds for win32" ( rev: 1 ) in Cairo

Not browsing as part of any series.

Commit Message

Alexander Täschner June 7, 2017, 2:01 p.m.
For static builds for win32 the mutexes are not initialized (for dynamic
builds its done when the DLL is loaded). Therefore the patch add
initialization to the create surface calls.

---
 src/win32/cairo-win32-display-surface.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
  return _cairo_surface_create_in_error (_cairo_error
(CAIRO_STATUS_NO_MEMORY));
@@ -1031,7 +1033,9 @@ cairo_win32_surface_create_with_dib (cairo_format_t
format,
 {
     if (! CAIRO_FORMAT_VALID (format))
  return _cairo_surface_create_in_error (_cairo_error
(CAIRO_STATUS_INVALID_FORMAT));
-
+#if CAIRO_WIN32_STATIC_BUILD
+    CAIRO_MUTEX_INITIALIZE ();
+#endif
     return _cairo_win32_display_surface_create_for_dc (NULL, format,
width, height);
 }

Patch hide | download patch | download mbox

diff --git a/src/win32/cairo-win32-display-surface.c
b/src/win32/cairo-win32-display-surface.c
index 025b2c9..56f0e65 100644
--- a/src/win32/cairo-win32-display-surface.c
+++ b/src/win32/cairo-win32-display-surface.c
@@ -953,7 +953,9 @@  cairo_win32_surface_create_with_format (HDC hdc,
cairo_format_t format)
     case CAIRO_FORMAT_RGB24:
  break;
     }
-
+#if CAIRO_WIN32_STATIC_BUILD
+    CAIRO_MUTEX_INITIALIZE ();
+#endif
     surface = malloc (sizeof (*surface));
     if (surface == NULL)

Comments

On 07.06.2017 16:01, Alexander Täschner wrote:
> For static builds for win32 the mutexes are not initialized (for dynamic
> builds its done when the DLL is loaded). Therefore the patch add
> initialization to the create surface calls.
> 
> ---
>  src/win32/cairo-win32-display-surface.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> diff --git a/src/win32/cairo-win32-display-surface.c
> b/src/win32/cairo-win32-display-surface.c
> index 025b2c9..56f0e65 100644
> --- a/src/win32/cairo-win32-display-surface.c
> +++ b/src/win32/cairo-win32-display-surface.c
> @@ -953,7 +953,9 @@ cairo_win32_surface_create_with_format (HDC hdc,
> cairo_format_t format)
>      case CAIRO_FORMAT_RGB24:
>   break;
>      }
> -
> +#if CAIRO_WIN32_STATIC_BUILD
> +    CAIRO_MUTEX_INITIALIZE ();
> +#endif
>      surface = malloc (sizeof (*surface));
>      if (surface == NULL)
>   return _cairo_surface_create_in_error (_cairo_error
> (CAIRO_STATUS_NO_MEMORY));
> @@ -1031,7 +1033,9 @@ cairo_win32_surface_create_with_dib (cairo_format_t
> format,
>  {
>      if (! CAIRO_FORMAT_VALID (format))
>   return _cairo_surface_create_in_error (_cairo_error
> (CAIRO_STATUS_INVALID_FORMAT));
> -
> +#if CAIRO_WIN32_STATIC_BUILD
> +    CAIRO_MUTEX_INITIALIZE ();
> +#endif
>      return _cairo_win32_display_surface_create_for_dc (NULL, format,
> width, height);
>  }

I would suggest doing the above unconditionally (without the #if).

Also, how about moving this to the beginning of
_cairo_win32_device_get()? That sounds central enough that every code
path in the win32 backend should go through it.

Uli