View Issue Details

IDCategoryLast Update
0007070bugs2018-12-28 05:16
ReportercolinfAssigned Topaul 
Reproducibilityalways 
Status resolvedResolutionfixed 
Product Version5.X git (version in description) 
Fixed in Version5.X git (version in description) 
Summary0007070: Automation controls set to "Play" mark session dirty at transport stop
DescriptionI've observed this in 5.4-104-ge4edd8e, but I think it may be a side-effect of adding VCAs, so it presumably came in around 5.0.
Steps To Reproduce* set a fader's automation state to "Play"
* roll transport
* stop transport - observe '*' in title bar indicating session is unsaved
Additional InformationSetting a breakpoint in Session::set_dirty() gets me here:

Thread 22 "ardour-5.4.85" hit Breakpoint 3, ARDOUR::Session::set_dirty (
    this=0x1f4fb20) at ../libs/ardour/session_state.cc:3392
3392 bool was_dirty = dirty();
(gdb) bt
#0 ARDOUR::Session::set_dirty (this=0x1f4fb20) at ../libs/ardour/session_state.cc:3392
0000001 0x00007ffff69419c3 in ARDOUR::SlavableAutomationControl::actually_set_value (this=0x494be00, val=1, group_override=PBD::Controllable::NoGroup)
    at ../libs/ardour/slavable_automation_control.cc:117
#2 0x00007ffff639a116 in ARDOUR::AutomationControl::set_value_unchecked (this=0x494be00, val=1) at /home/colinf/src/ardour2/ardour/libs/ardour/ardour/automation_control.h:108
#3 0x00007ffff63984d0 in ARDOUR::Automatable::transport_stopped (this=0x494b020, now=997376) at ../libs/ardour/automatable.cc:422
0000004 0x00007ffff6802fcf in ARDOUR::Route::nonrealtime_handle_transport_stopped (this=0x494ac20, can_flush_processors=true) at ../libs/ardour/route.cc:3212
0000005 0x00007ffff6934411 in ARDOUR::Session::non_realtime_stop (this=0x1f4fb20, abort=false, on_entry=1, finished=@0x7fffad733f6f: true) at ../libs/ardour/session_transport.cc:733
#6 0x00007ffff69331a1 in ARDOUR::Session::butler_transport_work (this=0x1f4fb20) at ../libs/ardour/session_transport.cc:449
#7 0x00007ffff63c0f73 in ARDOUR::Butler::thread_work (this=0x1f4c7b0) at ../libs/ardour/butler.cc:208
0000008 0x00007ffff63c0833 in ARDOUR::Butler::_thread_work (arg=0x1f4c7b0) at ../libs/ardour/butler.cc:156
0000009 0x00007ffff4b11df2 in fake_thread_start (arg=0x3f49190) at ../libs/pbd/pthread_utils.cc:101
0000010 0x00007fffef69c464 in start_thread (arg=0x7fffad735800) at pthread_create.c:333
0000011 0x00007fffec3d797f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:105

I'm not sure whether SlavableAutomationControl::actually_set_value() is wrong to unconditionally call set_dirty(), but clearly something isn't quite right.
TagsNo tags attached.

Activities

paul

2016-10-12 21:27

administrator   ~0018791

almost certainly fixed in c104c9d

confirmation and feedback appreciated.

colinf

2016-10-13 11:45

updater   ~0018800

Yes, seems to work as Id' expect now. Cheers!

colinf

2016-10-14 18:53

updater   ~0018815

Well, it was fixed in c104c9d4, but it's broken again after 9066dd73...

paul

2016-10-14 19:21

administrator   ~0018816

hmm, i thought i checked the same precise thing and it seemed OK. i guess i'll do it again ...

colinf

2016-10-16 11:38

updater   ~0018826

I re-instated the commented-out debug output in AutomationControl::actually_set_value() to see whether I could see any better what was going on, and noticed that it then works as expected if the automation control is set to play, but has no automated changes of value - the session is not marked dirty on stop. This is different behaviour from when the debug output is not there. Precision issues with "if (old_value != value)", maybe?

Also, if the control has automation that changes its value, the session is still marked dirty. This doesn't seem right to me, and isn't (as far as I remember) how it used to work back in 4.x.

paul

2016-10-16 19:52

administrator   ~0018827

new and improved fix is (hopefully) in 524f0c7

colinf

2017-01-25 22:42

updater   ~0019312

Yes, now works as expected.

Issue History

Date Modified Username Field Change
2016-10-12 19:23 colinf New Issue
2016-10-12 19:23 colinf Summary Automation controls set to "Play2 mark session dirty at transport stop => Automation controls set to "Play" mark session dirty at transport stop
2016-10-12 21:27 paul Note Added: 0018791
2016-10-12 21:27 paul Assigned To => paul
2016-10-12 21:27 paul Status new => feedback
2016-10-13 11:45 colinf Note Added: 0018800
2016-10-13 11:45 colinf Status feedback => assigned
2016-10-14 18:53 colinf Note Added: 0018815
2016-10-14 19:21 paul Note Added: 0018816
2016-10-16 11:38 colinf Note Added: 0018826
2016-10-16 19:52 paul Note Added: 0018827
2017-01-25 22:42 colinf Note Added: 0019312
2017-01-25 22:42 colinf Status assigned => resolved
2017-01-25 22:42 colinf Fixed in Version => 5.X git (version in description)
2017-01-25 22:42 colinf Resolution open => fixed