MCPcopy Create free account
hub / github.com/DeusData/codebase-memory-mcp / application_update_thread

Function application_update_thread

src/daemon/application.c:1777–1826  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1775}
1776
1777static void *application_update_thread(void *opaque) {
1778 cbm_daemon_application_t *application = opaque;
1779 cbm_daemon_application_update_worker_t worker = NULL;
1780 if (application->update_ops.start(application->update_ops.context, &worker) != 0 || !worker) {
1781 cbm_mutex_lock(&application->mutex);
1782 application_update_publish_terminal_locked(application, NULL, false);
1783 cbm_mutex_unlock(&application->mutex);
1784 return NULL;
1785 }
1786
1787 cbm_mutex_lock(&application->mutex);
1788 application->update_worker = worker;
1789 if (application->update_cancel_requested || application->stopping ||
1790 application->update_owners == 0) {
1791 application_update_cancel_locked(application);
1792 }
1793 cbm_mutex_unlock(&application->mutex);
1794
1795 const char *latest_version = NULL;
1796 for (;;) {
1797 cbm_daemon_application_update_poll_t status =
1798 application->update_ops.poll(application->update_ops.context, worker, &latest_version);
1799 if (status != CBM_DAEMON_APPLICATION_UPDATE_POLL_RUNNING) {
1800 if (status == CBM_DAEMON_APPLICATION_UPDATE_POLL_ERROR) {
1801 latest_version = NULL;
1802 }
1803 break;
1804 }
1805 cbm_mutex_lock(&application->mutex);
1806 if (application->update_cancel_requested || application->stopping ||
1807 application->update_owners == 0) {
1808 application_update_cancel_locked(application);
1809 }
1810 cbm_mutex_unlock(&application->mutex);
1811 cbm_usleep(APPLICATION_UPDATE_POLL_US);
1812 }
1813
1814 char version[APPLICATION_UPDATE_VERSION_CAP] = {0};
1815 if (latest_version && strlen(latest_version) < sizeof(version)) {
1816 (void)snprintf(version, sizeof(version), "%s", latest_version);
1817 }
1818 cbm_mutex_lock(&application->mutex);
1819 bool completed_generation = !application->update_cancel_requested && !application->stopping &&
1820 application->update_owners > 0;
1821 application_update_publish_terminal_locked(application, version[0] ? version : NULL,
1822 completed_generation);
1823 cbm_mutex_unlock(&application->mutex);
1824 application->update_ops.destroy(application->update_ops.context, worker);
1825 return NULL;
1826}
1827
1828static void application_update_subscribe_locked(cbm_daemon_application_session_t *session) {
1829 cbm_daemon_application_t *application = session->application;

Callers

nothing calls this directly

Calls 5

cbm_mutex_lockFunction · 0.85
cbm_mutex_unlockFunction · 0.85
startMethod · 0.80

Tested by

no test coverage detected