MCPcopy Create free account
hub / github.com/apache/httpd / dav_fs_refresh_locks

Function dav_fs_refresh_locks

modules/dav/fs/lock.c:1337–1423  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1335}
1336
1337static dav_error * dav_fs_refresh_locks(dav_lockdb *lockdb,
1338 const dav_resource *resource,
1339 const dav_locktoken_list *ltl,
1340 time_t new_time,
1341 dav_lock **locks)
1342{
1343 dav_error *err;
1344 apr_datum_t key;
1345 dav_lock_discovery *dp;
1346 dav_lock_discovery *dp_scan;
1347 dav_lock_indirect *ip;
1348 int dirty = 0;
1349 dav_lock *newlock;
1350
1351 *locks = NULL;
1352
1353 key = dav_fs_build_key(lockdb->info->pool, resource);
1354 if ((err = dav_fs_load_lock_record(lockdb, key, DAV_CREATE_LIST,
1355 &dp, &ip)) != NULL) {
1356 /* ### maybe add in a higher-level description */
1357 return err;
1358 }
1359
1360 /* ### we should be refreshing direct AND (resolved) indirect locks! */
1361
1362 /* refresh all of the direct locks on this resource */
1363 for (dp_scan = dp; dp_scan != NULL; dp_scan = dp_scan->next) {
1364 if (dav_fs_do_refresh(dp_scan, ltl, new_time)) {
1365 /* the lock was refreshed. return the lock. */
1366 newlock = dav_fs_alloc_lock(lockdb, key, dp_scan->locktoken);
1367 newlock->is_locknull = !resource->exists;
1368 newlock->scope = dp_scan->f.scope;
1369 newlock->type = dp_scan->f.type;
1370 newlock->depth = dp_scan->f.depth;
1371 newlock->timeout = dp_scan->f.timeout;
1372 newlock->owner = dp_scan->owner;
1373 newlock->auth_user = dp_scan->auth_user;
1374
1375 newlock->next = *locks;
1376 *locks = newlock;
1377
1378 dirty = 1;
1379 }
1380 }
1381
1382 /* if we refreshed any locks, then save them back. */
1383 if (dirty
1384 && (err = dav_fs_save_lock_record(lockdb, key, dp, ip)) != NULL) {
1385 /* ### maybe add in a higher-level description */
1386 return err;
1387 }
1388
1389 /* for each indirect lock, find its direct lock and refresh it. */
1390 for (; ip != NULL; ip = ip->next) {
1391 dav_lock_discovery *ref_dp;
1392 dav_lock_indirect *ref_ip;
1393
1394 if ((err = dav_fs_resolve(lockdb, ip, &dp_scan,

Callers

nothing calls this directly

Calls 6

dav_fs_build_keyFunction · 0.85
dav_fs_load_lock_recordFunction · 0.85
dav_fs_do_refreshFunction · 0.85
dav_fs_alloc_lockFunction · 0.85
dav_fs_save_lock_recordFunction · 0.85
dav_fs_resolveFunction · 0.85

Tested by

no test coverage detected