Changeset 43e2cbc in mainline for kernel/generic/src/ipc/sysipc.c
- Timestamp:
- 2016-09-10T13:56:43Z (9 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0b00599
- Parents:
- 838ea8aa
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/ipc/sysipc.c
r838ea8aa r43e2cbc 285 285 #endif 286 286 287 rc = ipc_call_sync(phone, call); 287 ipc_call_hold(call); 288 rc = ipc_call_sync(phone, call); 289 spinlock_lock(&call->forget_lock); 290 bool forgotten = call->forget; 291 spinlock_unlock(&call->forget_lock); 292 ipc_call_release(call); 288 293 289 294 #ifdef CONFIG_UDEBUG … … 291 296 #endif 292 297 293 if (rc != EOK) 294 return EINTR; 298 if (rc != EOK) { 299 if (!forgotten) { 300 /* 301 * There was an error, but it did not result 302 * in the call being forgotten. In fact, the 303 * call was not even sent. We are still 304 * its owners and are responsible for its 305 * deallocation. 306 */ 307 ipc_call_free(call); 308 } else { 309 /* 310 * The call was forgotten and it changed hands. 311 * We are no longer expected to free it. 312 */ 313 ASSERT(rc == EINTR); 314 } 315 return rc; 316 } 295 317 296 318 process_answer(call);
Note:
See TracChangeset
for help on using the changeset viewer.