Changeset f3b97d1 in mainline
- Timestamp:
- 2012-09-26T16:18:34Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6f9c8f6
- Parents:
- c99d470
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/ipc/sysipc_ops.h
rc99d470 rf3b97d1 38 38 #include <ipc/ipc.h> 39 39 40 /** 41 * This header declares the per-method IPC callbacks. Using these callbacks, 42 * each IPC method (but system methods in particular), can define actions that 43 * will be called at specific moments in the call life-cycle. 44 * 45 * Normally, the kernel will attempt to invoke the following callbacks in the 46 * following order on each call: 47 * 48 * request_preprocess() 49 * request_process() 50 * answer_preprocess() 51 * answer_process() 52 * 53 * This callback invocation sequence is a natural order of processing. Note, 54 * however, that due to various special circumstances, callbacks may be called 55 * also in a different than natural order of processing. This means that some 56 * callbacks may be skipped and some others may be called instead. 57 * 58 * The additional callbacks that may be called are as follows: 59 * 60 * request_forget() 61 * answer_cleanup() 62 * 63 * There are several notable scenarios in which some callbacks of the natural 64 * order of processing will be skipped. 65 * 66 * The request_process(), answer_preprocess() and answer_process() callbacks 67 * will be skipped if the call cannot be dispatched to the callee. This may 68 * happen when e.g. the request_preprocess() callback fails or the connection to 69 * the callee is not functional. The next callback that will be invoked on the 70 * call is request_forget(). 71 * 72 * The request_process() callback will be skipped if the callee terminates 73 * before picking up the request. In this case, the terminating task will 74 * cleanup its dispatched calls list and so the next callback invoked on the 75 * call will usually be answer_preprocess(). If, in the meantime, the caller 76 * terminates too, it may happen that the call will be forgotten instead of 77 * answered, in which case the kernel will invoke the request_forget() and 78 * answer_cleanup() callbacks instead. The order in which they are invoked is 79 * not defined. 80 * 81 * The answer_process() callback will be skipped if the caller terminates before 82 * picking up the answer. This means that this callback is not suitable for 83 * releasing system resources allocated by the preceding callbacks. 84 * 85 * The comments for each callback type describe the specifics of each callback 86 * such as the context in which it is invoked and various constraints. 87 */ 88 40 89 typedef struct { 41 90 /** … … 67 116 * Caller alive: no guarantee 68 117 * Races with: request_forget() 69 * Invoked on: calls that are received by the callee118 * Invoked on: calls that are explicitly received by the callee 70 119 */ 71 120 int (* request_process)(call_t *, answerbox_t *); … … 99 148 * Caller alive: guaranteed 100 149 * Races with: N/A 101 * Invoked on: a ll answered calls150 * Invoked on: answered calls explicitly received by the caller 102 151 */ 103 152 int (* answer_process)(call_t *);
Note:
See TracChangeset
for help on using the changeset viewer.