static void team_gone(team_id team, void *_session) { Session *session = (Session *)_session; session->Lock(); stop_session(session); }
static Session * start_session(team_id team, dev_t device, ino_t node, const char *name, int32 seconds = 30) { RecursiveLocker locker(&sLock); Session *session = new Session(team, name, device, node, seconds); if (session == NULL) return NULL; if (session->InitCheck() != B_OK || session->StartWatchingTeam() != B_OK) { delete session; return NULL; } // let's see if there is a prefetch session for this session Session *prefetchSession; if (session->IsMainSession()) { // search for session by name for (prefetchSession = sMainPrefetchSessions; prefetchSession != NULL; prefetchSession = prefetchSession->Next()) { if (!strcmp(prefetchSession->Name(), name)) { // found session! break; } } } else { // ToDo: search for session by device/node ID prefetchSession = NULL; } if (prefetchSession != NULL) { TRACE(("found prefetch session %s\n", prefetchSession->Name())); prefetchSession->Prefetch(); } if (team >= B_OK) hash_insert(sTeamHash, session); session->Lock(); return session; }