LowFatMilk Updates

2.1.6 crashes Rack 2.1.2 on this Mac Mini (M1, 16GB, MacOS 13.0 (Ventura)

Thread 10 Crashed:
0   ???                           	               0x0 ???
1   plugin.dylib                  	        0x147ce556 ProjectMRenderer::renderLoop(mySettings, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) + 614
2   plugin.dylib                  	        0x147cf07f void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, ProjectMRenderer::init(mySettings const&, int*, int*, int*, int*)::$_0> >(void*) + 223
3   libsystem_pthread.dylib       	    0x7ff81b677259 _pthread_start + 125
4   libsystem_pthread.dylib       	    0x7ff81b672c7b thread_start + 15

that is all it leaves behind, this is on adding it to an empty rack (embedded version)

Same for me. Crashes directly when added to a patch with just a few modules.

My Configuration is

  • Rack Pro 2.1.2
  • macOS Catalina (10.15.7)
  • iMac (5k, 27“ Display) Intel Core i5
  • AMD Radeon R0 M395 Graphics Card

From the Crash Log

Process:               Rack [893]
Path:                  /Applications/VCV Rack 2 Pro.app/Contents/MacOS/Rack
Identifier:            com.vcvrack.rack
Version:               2.1.2 (2.1.2)
Code Type:             X86-64 (Native)
Parent Process:        ??? [1]
Responsible:           Rack [893]
User ID:               501

Date/Time:             2022-11-04 10:33:52.373 +0100
OS Version:            Mac OS X 10.15.7 (19H2)
Report Version:        12
Anonymous UUID:        XXX


Time Awake Since Boot: 1000 seconds

System Integrity Protection: enabled

Crashed Thread:        11

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

VM Regions Near 0:
--> 
    Kernel Alloc Once      000000000a4b1000-000000000a4b3000 [    8K] rw-/rwx SM=PRV  

Thread 0:: Dispatch queue: com.apple.main-thread
0   libRack.dylib                 	0x000000010a4ed7d6 nvg__tesselateBezier + 150
1   libRack.dylib                 	0x000000010a4ed8f5 nvg__tesselateBezier + 437
2   libRack.dylib                 	0x000000010a4ed8f5 nvg__tesselateBezier + 437
3   libRack.dylib                 	0x000000010a4ed8f5 nvg__tesselateBezier + 437
4   libRack.dylib                 	0x000000010a4ed8f5 nvg__tesselateBezier + 437
5   libRack.dylib                 	0x000000010a4ed8f5 nvg__tesselateBezier + 437
6   libRack.dylib                 	0x000000010a4caf1c nvg__flattenPaths + 300
7   libRack.dylib                 	0x000000010a4cacca nvgFill + 106
8   libRack.dylib                 	0x000000010a5f8caf rack::window::svgDraw(NVGcontext*, NSVGimage*) + 1327
9   libRack.dylib                 	0x000000010a5f606d rack::widget::Widget::draw(rack::widget::Widget::DrawArgs const&) + 461
10  libRack.dylib                 	0x000000010a5f4930 rack::widget::FramebufferWidget::drawFramebuffer() + 192
11  libRack.dylib                 	0x000000010a5f4639 rack::widget::FramebufferWidget::render(rack::math::Vec, rack::math::Vec, rack::math::Rect) + 1001
12  libRack.dylib                 	0x000000010a5f40e1 rack::widget::FramebufferWidget::draw(rack::widget::Widget::DrawArgs const&) + 545
13  libRack.dylib                 	0x000000010a5f606d rack::widget::Widget::draw(rack::widget::Widget::DrawArgs const&) + 461
14  libRack.dylib                 	0x000000010a5f606d rack::widget::Widget::draw(rack::widget::Widget::DrawArgs const&) + 461
15  libRack.dylib                 	0x000000010a594061 rack::app::ModuleWidget::draw(rack::widget::Widget::DrawArgs const&) + 97
16  libRack.dylib                 	0x000000010a5f606d rack::widget::Widget::draw(rack::widget::Widget::DrawArgs const&) + 461
17  libRack.dylib                 	0x000000010a5f606d rack::widget::Widget::draw(rack::widget::Widget::DrawArgs const&) + 461
18  libRack.dylib                 	0x000000010a5a709b rack::app::RackWidget::draw(rack::widget::Widget::DrawArgs const&) + 59
19  libRack.dylib                 	0x000000010a5f606d rack::widget::Widget::draw(rack::widget::Widget::DrawArgs const&) + 461
20  libRack.dylib                 	0x000000010a5f66d9 rack::widget::ZoomWidget::draw(rack::widget::Widget::DrawArgs const&) + 105
21  libRack.dylib                 	0x000000010a5f606d rack::widget::Widget::draw(rack::widget::Widget::DrawArgs const&) + 461
22  libRack.dylib                 	0x000000010a5f606d rack::widget::Widget::draw(rack::widget::Widget::DrawArgs const&) + 461
23  libRack.dylib                 	0x000000010a5ef224 rack::ui::ScrollWidget::draw(rack::widget::Widget::DrawArgs const&) + 52
24  libRack.dylib                 	0x000000010a5f606d rack::widget::Widget::draw(rack::widget::Widget::DrawArgs const&) + 461
25  libRack.dylib                 	0x000000010a5fb20d rack::window::Window::step() + 1997
26  libRack.dylib                 	0x000000010a5faa28 rack::window::Window::run() + 40
27  com.vcvrack.rack              	0x000000010a4a2fbe main + 3454
28  libdyld.dylib                 	0x00007fff6e915cc9 start + 1

Thread 1:
0   libsystem_pthread.dylib       	0x00007fff6eb15b68 start_wqthread + 0

Thread 2:: AMCP Logging Spool
0   libsystem_kernel.dylib        	0x00007fff6ea56e36 semaphore_wait_trap + 10
1   com.apple.audio.caulk         	0x00007fff684e9b16 caulk::mach::semaphore::wait() + 16
2   com.apple.audio.caulk         	0x00007fff684e99b2 caulk::semaphore::timed_wait(double) + 106
3   com.apple.audio.caulk         	0x00007fff684e97c4 caulk::concurrent::details::worker_thread::run() + 30
4   com.apple.audio.caulk         	0x00007fff684e91e4 void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, void (caulk::concurrent::details::worker_thread::*)(), std::__1::tuple<caulk::concurrent::details::worker_thread*> > >(void*) + 45
5   libsystem_pthread.dylib       	0x00007fff6eb1a109 _pthread_start + 148
6   libsystem_pthread.dylib       	0x00007fff6eb15b8b thread_start + 15

Thread 3:
0   libsystem_kernel.dylib        	0x00007fff6ea56e36 semaphore_wait_trap + 10
1   com.apple.audio.caulk         	0x00007fff684e9b16 caulk::mach::semaphore::wait() + 16
2   com.apple.audio.caulk         	0x00007fff684e99b2 caulk::semaphore::timed_wait(double) + 106
3   com.apple.audio.caulk         	0x00007fff684e97c4 caulk::concurrent::details::worker_thread::run() + 30
4   com.apple.audio.caulk         	0x00007fff684e91e4 void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, void (caulk::concurrent::details::worker_thread::*)(), std::__1::tuple<caulk::concurrent::details::worker_thread*> > >(void*) + 45
5   libsystem_pthread.dylib       	0x00007fff6eb1a109 _pthread_start + 148
6   libsystem_pthread.dylib       	0x00007fff6eb15b8b thread_start + 15

Thread 4:
0   libsystem_pthread.dylib       	0x00007fff6eb15b68 start_wqthread + 0

Thread 5:
0   libsystem_kernel.dylib        	0x00007fff6ea56dfa mach_msg_trap + 10
1   libsystem_kernel.dylib        	0x00007fff6ea57170 mach_msg + 60
2   com.apple.audio.midi.CoreMIDI 	0x00007fff35896635 XServerMachPort::ReceiveMessage(int&, void*, int&) + 95
3   com.apple.audio.midi.CoreMIDI 	0x00007fff358b3fee MIDIProcess::RunMIDIInThread() + 104
4   com.apple.audio.midi.CoreMIDI 	0x00007fff358b2d5e XThread::RunHelper(void*) + 10
5   com.apple.audio.midi.CoreMIDI 	0x00007fff35896331 CAPThread::Entry(CAPThread*) + 77
6   libsystem_pthread.dylib       	0x00007fff6eb1a109 _pthread_start + 148
7   libsystem_pthread.dylib       	0x00007fff6eb15b8b thread_start + 15

Thread 6:
0   libsystem_pthread.dylib       	0x00007fff6eb15b68 start_wqthread + 0

Thread 7:: com.apple.NSEventThread
0   libsystem_kernel.dylib        	0x00007fff6ea56dfa mach_msg_trap + 10
1   libsystem_kernel.dylib        	0x00007fff6ea57170 mach_msg + 60
2   com.apple.CoreFoundation      	0x00007fff34a3eef5 __CFRunLoopServiceMachPort + 247
3   com.apple.CoreFoundation      	0x00007fff34a3d9c2 __CFRunLoopRun + 1319
4   com.apple.CoreFoundation      	0x00007fff34a3ce3e CFRunLoopRunSpecific + 462
5   com.apple.AppKit              	0x00007fff31e50954 _NSEventThread + 132
6   libsystem_pthread.dylib       	0x00007fff6eb1a109 _pthread_start + 148
7   libsystem_pthread.dylib       	0x00007fff6eb15b8b thread_start + 15

Thread 8:: com.apple.audio.IOThread.client
0   libsystem_kernel.dylib        	0x00007fff6ea56dfa mach_msg_trap + 10
1   libsystem_kernel.dylib        	0x00007fff6ea57170 mach_msg + 60
2   com.apple.audio.CoreAudio     	0x00007fff34120c75 HALB_MachPort::SendSimpleMessageWithSimpleReply(unsigned int, unsigned int, int, int&, bool, unsigned int) + 111
3   com.apple.audio.CoreAudio     	0x00007fff3401cf18 invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext(unsigned int, unsigned int) + 2677
4   com.apple.audio.CoreAudio     	0x00007fff34150c22 HALB_IOThread::Entry(void*) + 72
5   libsystem_pthread.dylib       	0x00007fff6eb1a109 _pthread_start + 148
6   libsystem_pthread.dylib       	0x00007fff6eb15b8b thread_start + 15

Thread 9:
0   libsystem_kernel.dylib        	0x00007fff6ea59882 __psynch_cvwait + 10
1   libsystem_pthread.dylib       	0x00007fff6eb1a425 _pthread_cond_wait + 698
2   libc++.1.dylib                	0x00007fff6bbe8592 std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&) + 18
3   libRack.dylib                 	0x000000010a5e3902 rack::engine::Engine_fallbackRun(rack::engine::Engine*) + 226
4   libRack.dylib                 	0x000000010a5e456c void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(rack::engine::Engine*), rack::engine::Engine*> >(void*) + 44
5   libsystem_pthread.dylib       	0x00007fff6eb1a109 _pthread_start + 148
6   libsystem_pthread.dylib       	0x00007fff6eb15b8b thread_start + 15

Thread 10:
0   libsystem_pthread.dylib       	0x00007fff6eb15b68 start_wqthread + 0

Thread 11 Crashed:
0   ???                           	000000000000000000 0 + 0
1   plugin.dylib                  	0x00000000127c8556 ProjectMRenderer::renderLoop(mySettings, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) + 614
2   plugin.dylib                  	0x00000000127c907f void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, ProjectMRenderer::init(mySettings const&, int*, int*, int*, int*)::$_0> >(void*) + 223
3   libsystem_pthread.dylib       	0x00007fff6eb1a109 _pthread_start + 148
4   libsystem_pthread.dylib       	0x00007fff6eb15b8b thread_start + 15

Thread 11 crashed with X86 Thread State (64-bit):
  rax: 0x000000010acdda38  rbx: 0x00007fac8f200000  rcx: 0x00000000000002f8  rdx: 0x000000000000041a
  rdi: 0x0000000000000000  rsi: 0x0000000000000000  rbp: 0x0000700008b2ee90  rsp: 0x0000700008b2ee18
   r8: 0x0000000000001908   r9: 0x0000000000001400  r10: 0x0000000000000003  r11: 0x0000000000000007
  r12: 0x000000000030b4c0  r13: 0x0000000000000000  r14: 0x00007fac87d77b70  r15: 0x00007fac87d77b90
  rip: 0x0000000000000000  rfl: 0x0000000000000246  cr2: 0x00007fff6bc3cd42
  
Logical CPU:     0
Error Code:      0x020000b8
Trap Number:     133


Hope this helps

Just to be sure, the 2.1.5 version was working for you ?

Jup. Worked without any issues, both versions (module and external window)

I have uploaded a different version to my Google drive. Can you test that one please (@aetrion-music , @fractalgee )?

1 Like

I tried the .zip file from the Google Drive that has a newer time stamp than the windows .zip. Unfortunately Rack still crashes immediately as the module is loaded (opening a patch with it or adding it to an empty patch).

Thank you for testing. The problem is that Mac doesn’t like the latest versions of projectM , the library that I am using. So that means I have to go back in time to get the version that was working on Mac. But that version doesn’t have the api call built in that I need for being able to change beat sensitivity with a knob. I have a workaround available, so that is what I have to implement. Expect a new version to test today or tomorrow.

1 Like

@aetrion-music and other mac users, I have uploaded a new mac version on my google drive: https://drive.google.com/drive/folders/1D0fXubpRCp_rHsIQbyyp0xLH5JdCukbj

Hopefully this one fixes the issue.

afraid it still crashes on add (either) with the same stack:

Thread 12 Crashed:
0   ???                           	               0x0 ???
1   plugin.dylib                  	        0x121bfea6 ProjectMRenderer::renderLoop(mySettings, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) + 614
2   plugin.dylib                  	        0x121c09d9 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, ProjectMRenderer::init(mySettings const&, int*, int*, int*, int*)::$_0> >(void*) + 233
3   libsystem_pthread.dylib       	    0x7ff808ce7259 _pthread_start + 125
4   libsystem_pthread.dylib       	    0x7ff808ce2c7b thread_start + 15

A new version for Mac is again available. This has been tested on 1 Mac and confirmed to be working. I hope this also works for you. The previous versions crashed because of a functionality that was used that apparently has a bug on Mac platform. Fingers crossed this one works better for you guys too. Please let me know the results.

2 Likes

Huzaah! RPJVisualizer v2.1.6 from LowFatMilk - Google Drive loads on my Mac now and the module can actually be added to a patch and actually displays something and doesn’t blow up Rack. Hoorahh and well done! That closes RPJ Visualizer 2.1.0 has an update loop and doesn't load · Issue #72 · kockie69/RPJ · GitHub

1 Like

I still have issues open from people having issues with resizing on Linux (myself included on my new Linux box). On Mac users have reported crashes when resizing and on some Linux configurations messy screens have been reported. My proposal for now, I am going to disable this functionality on Mac and keep it in on Windows and Linux. Any thoughts from my users/the community?

3 Likes

Yes. Better having reduced functionality but working than not having it at all.

2 Likes

Ok, tomorrow I will send the new version of LFM to the VCV team. Not only more controls to play with but also 10.000 new presets.

Have fun and stay tuned.

Robert

4 Likes

For a future release - is there any way to have LFM cycle through a set of my favorite presets instead of the entire collection?

Yes, that is what I want to build for the next release. You can also do it manualy, by going into the res/projectm_presets folder and only leave your favourites in. Any requirements welcome for preset management.

Version 2.1.6 of LFM has just been made available in the library

What is Fixed?

  • Resizing on Linux should now work on all platforms
  • Better support for Mac
  • Some presets were not rendering

What was Added?

  • Hardcut functionality added by adding a knob and cv (see manual for details)
  • Beat sensitivity is now a knob and has cv
  • We now have triggering for both previous and next preset
  • The gradient can be set, which will result in lighter (or darker) preset display
  • Added 10000 new presets (some of them are really cool!)
8 Likes

Hey Robert!

I tested out the new version on Mac, works great. Love the new presets!

Question: Is there a way to “expose” the preset selection so that we can store our favorites as module presets in VCV directly?

I somehow assumed this worked already only to find out the visualization doesn’t change when changing VCV module presets (had like 10 of my favs picked out of 1000s I looked through :sob: )

Or are you planning on adding a folder structure / favoriting soon anyway like you mentioned above?

I have already a test version ready thet implements the favourite list. This test version works as follows: There is a button that will bring you in either default mode (full preset list) or favourite mode (list with your selected presets). When you are in default mode, you can press a plus button, that will add presets to your favourite list. When you are in favourite mode, you can press the minus button that will remove presets from your favourite list. The challengie I still have is that the library I use (projectm) can’t deal properly with multiple lists. So pressing next, will play the next preset from the complete list. I have options to fix this, but it is still something I have to do. At the moment I am also working on another request, to remove the frames around the window version and to keep on top all the time. That is now in test.

4 Likes

The option for a personal favorites list sounds great. Could you also implement an independent module favorites list that gets stored with the module instantiation in a particular patch?

Or perhaps simpler, but just as effective would be to allow for named favorite lists that would be stored globally.

I would like to be able to have a different set of presets to cycle through for each patch. I might even want two instances of LFM within the same patch, each with its own favorite list that it cycles through. Either of the suggestions above would allow for this.

1 Like