jp9000 8b3416c1e7 libobs: Implement deferred destruction of sources
(This also modifies the UI)

The purpose of deferring destruction of sources is to ensure that:
1.) Hard locks from enumeration cannot occur with source destruction.
  For example, if the browser source is destroyed while in the graphics
  thread, the browser thread would wait for the graphics thread, but the
  graphics thread would still be waiting for the browser thread, causing
  a hard lock.
2.) When destroys occur during source enumeration, that the integrity of
  the context's next pointer in the linked list can no longer be
  compromised
3.) Source releases are fully asynchronous rather than having the risk
  of stalling the calling thread
4.) We can wait for source destruction when switching scene collections
  or when shutting down rather than hoping for threads to be finished
  with sources.

This introduces a new requirement when cleaning up scene/source data:
the obs_wait_for_destroy_queue() function. It is highly recommended that
this function be called after cleaning up sources. It will return true
if at least one or more sources were destroyed. Otherwise it will return
false. Forks are highly advised to call this function manually on source
cleanup -- preferably in a loop, in conjunction with processing
outstanding OBS signals and UI events.
2021-12-19 11:53:19 -08:00
..
2021-12-17 08:01:29 +00:00
2021-11-26 23:23:51 +13:00
2016-08-27 20:19:45 -07:00
2016-08-27 20:19:45 -07:00
2019-06-23 23:49:10 -07:00
2020-08-17 07:18:18 -07:00
2020-08-17 07:18:18 -07:00
2016-08-27 20:19:45 -07:00
2019-06-23 23:49:10 -07:00
2016-08-27 20:19:45 -07:00
2019-06-23 23:49:10 -07:00
2019-02-07 14:47:15 -08:00
2021-11-26 23:23:51 +13:00
2020-08-17 07:18:18 -07:00
2020-08-17 07:18:18 -07:00
2020-01-01 15:58:48 +11:00
2021-03-08 23:42:21 +13:00
2020-06-21 18:23:05 -07:00
2021-08-07 01:07:04 -07:00
2020-08-17 07:18:18 -07:00
2020-08-17 07:18:18 -07:00
2019-06-23 23:49:10 -07:00
2019-06-23 23:49:10 -07:00
2019-07-21 20:53:30 -07:00