| 1344 | |
| 1345 | |
| 1346 | void Blob::freeClientData(CheckStatusWrapper* status, bool force) |
| 1347 | { |
| 1348 | /************************************** |
| 1349 | * |
| 1350 | * g d s _ c a n c e l _ b l o b |
| 1351 | * |
| 1352 | ************************************** |
| 1353 | * |
| 1354 | * Functional description |
| 1355 | * Abort a partially completed blob. |
| 1356 | * |
| 1357 | **************************************/ |
| 1358 | try |
| 1359 | { |
| 1360 | if (!blob) |
| 1361 | { |
| 1362 | return; |
| 1363 | } |
| 1364 | |
| 1365 | CHECK_HANDLE(blob, isc_bad_segstr_handle); |
| 1366 | |
| 1367 | Rdb* rdb = blob->rbl_rdb; |
| 1368 | CHECK_HANDLE(rdb, isc_bad_db_handle); |
| 1369 | rem_port* port = rdb->rdb_port; |
| 1370 | RefMutexGuard portGuard(*port->port_sync, FB_FUNCTION); |
| 1371 | |
| 1372 | try |
| 1373 | { |
| 1374 | if (!blob->isCached()) |
| 1375 | release_object(status, rdb, op_cancel_blob, blob->rbl_id); |
| 1376 | } |
| 1377 | catch (const Exception&) |
| 1378 | { |
| 1379 | if (!force) |
| 1380 | throw; |
| 1381 | } |
| 1382 | release_blob(blob); |
| 1383 | blob = NULL; |
| 1384 | } |
| 1385 | catch (const Exception& ex) |
| 1386 | { |
| 1387 | ex.stuffException(status); |
| 1388 | } |
| 1389 | } |
| 1390 | |
| 1391 | |
| 1392 | void Blob::internalCancel(CheckStatusWrapper* status) |
nothing calls this directly
no test coverage detected