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

Function application_update_thread

src/daemon/application.c:1882–1931  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1880}
1881
1882static void *application_update_thread(void *opaque) {
1883 cbm_daemon_application_t *application = opaque;
1884 cbm_daemon_application_update_worker_t worker = NULL;
1885 if (application->update_ops.start(application->update_ops.context, &worker) != 0 || !worker) {
1886 cbm_mutex_lock(&application->mutex);
1887 application_update_publish_terminal_locked(application, NULL, false);
1888 cbm_mutex_unlock(&application->mutex);
1889 return NULL;
1890 }
1891
1892 cbm_mutex_lock(&application->mutex);
1893 application->update_worker = worker;
1894 if (application->update_cancel_requested || application->stopping ||
1895 application->update_owners == 0) {
1896 application_update_cancel_locked(application);
1897 }
1898 cbm_mutex_unlock(&application->mutex);
1899
1900 const char *latest_version = NULL;
1901 for (;;) {
1902 cbm_daemon_application_update_poll_t status =
1903 application->update_ops.poll(application->update_ops.context, worker, &latest_version);
1904 if (status != CBM_DAEMON_APPLICATION_UPDATE_POLL_RUNNING) {
1905 if (status == CBM_DAEMON_APPLICATION_UPDATE_POLL_ERROR) {
1906 latest_version = NULL;
1907 }
1908 break;
1909 }
1910 cbm_mutex_lock(&application->mutex);
1911 if (application->update_cancel_requested || application->stopping ||
1912 application->update_owners == 0) {
1913 application_update_cancel_locked(application);
1914 }
1915 cbm_mutex_unlock(&application->mutex);
1916 cbm_usleep(APPLICATION_UPDATE_POLL_US);
1917 }
1918
1919 char version[APPLICATION_UPDATE_VERSION_CAP] = {0};
1920 if (latest_version && strlen(latest_version) < sizeof(version)) {
1921 (void)snprintf(version, sizeof(version), "%s", latest_version);
1922 }
1923 cbm_mutex_lock(&application->mutex);
1924 bool completed_generation = !application->update_cancel_requested && !application->stopping &&
1925 application->update_owners > 0;
1926 application_update_publish_terminal_locked(application, version[0] ? version : NULL,
1927 completed_generation);
1928 cbm_mutex_unlock(&application->mutex);
1929 application->update_ops.destroy(application->update_ops.context, worker);
1930 return NULL;
1931}
1932
1933static void application_update_subscribe_locked(cbm_daemon_application_session_t *session) {
1934 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