Rev 4345 | Rev 4348 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4345 | Rev 4346 | ||
|---|---|---|---|
| Line 934... | Line 934... | ||
| 934 | goto restart; |
934 | goto restart; |
| 935 | 935 | ||
| 936 | /* Include phone address('id') of the caller in the request, |
936 | /* Include phone address('id') of the caller in the request, |
| 937 | * copy whole call->data, not only call->data.args */ |
937 | * copy whole call->data, not only call->data.args */ |
| 938 | if (STRUCT_TO_USPACE(calldata, &call->data)) { |
938 | if (STRUCT_TO_USPACE(calldata, &call->data)) { |
| 939 | /* XXX |
939 | /* |
| 940 | * To avoid deadlocks in synchronous calls |
940 | * The callee will not receive this call and no one else has |
| 941 | * this should be replaced by discarding |
- | |
| 942 | * the call and notifying the caller. |
941 | * a chance to answer it. Reply with the EPARTY error code. |
| 943 | */ |
942 | */ |
| - | 943 | ipc_data_t saved_data; |
|
| - | 944 | int saveddata = 0; |
|
| - | 945 | ||
| - | 946 | if (answer_need_old(call)) { |
|
| - | 947 | memcpy(&saved_data, &call->data, sizeof(call->data)); |
|
| - | 948 | saveddata = 1; |
|
| - | 949 | } |
|
| - | 950 | ||
| - | 951 | IPC_SET_RETVAL(call->data, EPARTY); |
|
| - | 952 | (void) answer_preprocess(call, saveddata ? &saved_data : NULL); |
|
| - | 953 | ipc_answer(&TASK->answerbox, call); |
|
| 944 | return 0; |
954 | return 0; |
| 945 | } |
955 | } |
| 946 | return (unative_t)call; |
956 | return (unative_t)call; |
| 947 | } |
957 | } |
| 948 | 958 | ||