Skip to content

[UIFontDescriptor initialize] may have been in progress in another thread when fork() was called #414

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

Open
erdemgezer opened this issue Mar 12, 2025 · 8 comments
Labels

Comments

@erdemgezer
Copy link

Having interesting errors both on Mac and Ubuntu (Docker) while adding text on top of an image using ruby-vips.

text = Vips::Image.text(
        text_content,
        width: width,
        height: height,
        align: vips_align,
        font: font_name,
        fontfile: font_file,
        spacing: line_spacing
      )
image.composite(text, :over, x: x, y: y)

On my mac development environment, If I call this method from an ActiveJob, it fails with:

objc[25970]: +[UIFontDescriptor initialize] may have been in progress in another thread when fork() was called.
objc[25970]: +[UIFontDescriptor initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.

Using of env var OBJC_DISABLE_INITIALIZE_FORK_SAFETY=yes fixes it as suggested in #155 (comment)

However, on Ubuntu docker environment I randomly get segmentation fault errors or floating point exception errors when running the from Rails console.

Everthing works fine if I don't use the .text method in both environments.

Mac stack
MacOS 15.3.1 (M2)
Ruby 3.3.5
Rails 7.2.1
vips-8.16.0

Ubuntu stack
Dockerized x86_64
Linux 116.202.15.119-1f5530ef76b3 6.8.0-54-generic
Using libvips42 package
Ruby 3.3.5
Rails 7.2.1

@erdemgezer erdemgezer added the bug label Mar 12, 2025
@jcupitt
Copy link
Member

jcupitt commented Mar 13, 2025

Hi @erdemgezer,

There have been some improvements to locking in text rendering in recent libvipses. Have you tried your Ubuntu example with current stable libvips (8.16.1)?

Text rendering is extremely complex, unfortunately, and interacts with a huge number of different libraries and system components on the various platforms :(

@erdemgezer
Copy link
Author

Hi @erdemgezer,

There have been some improvements to locking in text rendering in recent libvipses. Have you tried your Ubuntu example with current stable libvips (8.16.1)?

Text rendering is extremely complex, unfortunately, and interacts with a huge number of different libraries and system components on the various platforms :(

Hi @jcupitt ,
Thanks for letting me know about the latest stable release. I used to install libvips via apt-get from the Dockerfile but I believe I need to build it from source to be able to use the latest version. I'll give it a go and share the results.

@kleisauke
Copy link
Member

@erdemgezer Were you able to make any progress with this?

Linux 116.202.15.119-1f5530ef76b3 6.8.0-54-generic

For triage purposes: this looks like Ubuntu 24.04, which provides libvips 8.15.1.

@erdemgezer
Copy link
Author

erdemgezer commented Apr 11, 2025

@kleisauke I've tried building latest libvips 8.16.1 but didn't help with random segmentation fault errors on Ubuntu.

@kleisauke
Copy link
Member

Does this only occur if you run it from the Rails console? Can you reproduce this without the fontfile argument? I tried this:

$ docker run -e DEBIAN_FRONTEND=noninteractive -v $(pwd):/src -w /src -it ubuntu:24.04 sh -c "\
    apt-get update -y && \
    apt-get install -y --no-install-recommends libvips-tools && \
    vips text hello_world.png '<span foreground=\"#ff5500\" background=\"#c8c8c8\">Hello, world!</span>' --width 500 --height 500 --dpi 300 --rgba"

Which produces:
Image

So at least that seems to work without any issues.

@erdemgezer
Copy link
Author

I think it only occurs when I use the fontfile argument and run from Rails console.
I'll try to reproduce again and let you know asap.

@kleisauke
Copy link
Member

Note to self: check if this is related to Rails (or Puma) its fork() behaviour. Perhaps the Pango thread here is spawned before the fork() call?

@erdemgezer
Copy link
Author

@kleisauke it's also randomly failing when it's called from a SolidQueue Job (ActiveJob). It usually works on the second retry.

Type | SolidQueue::Processes::ProcessExitError
Process pid=46 exited unexpectedly. Received unhandled signal 8.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants