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 |