diff options
Diffstat (limited to 'config/os/macosx/ipc.h')
-rw-r--r-- | config/os/macosx/ipc.h | 232 |
1 files changed, 117 insertions, 115 deletions
diff --git a/config/os/macosx/ipc.h b/config/os/macosx/ipc.h index 8c0e546..73825c4 100644 --- a/config/os/macosx/ipc.h +++ b/config/os/macosx/ipc.h @@ -14,10 +14,10 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - + Grame Research Laboratory, 9, rue du Garet 69001 Lyon - France grame@rd.grame.fr -*/ + */ #ifndef __ipc__ #define __ipc__ @@ -26,140 +26,142 @@ #include <servers/bootstrap.h> #include "internal.h" #include "engine.h" -#include "libjack/local.h" /* JOQ: fix me */ +#include "libjack/local.h" /* JOQ: fix me */ /* RPC without time out can put the jack server in a blocked state (waiting for the client answer) when a client is killed. The mach_msg function does not return any error in this case. Using time out solve the problem but does not seems really satisfactory. -*/ + */ #define WAIT 2500 /* in millisecond */ -static inline int -jack_client_resume(jack_client_internal_t *client) +static inline int +jack_client_resume (jack_client_internal_t *client) { - mach_msg_header_t *head = &client->message.header; - int err; - - if (!client->running) { - err = mach_msg (head, MACH_RCV_MSG, 0, sizeof(client->message), - client->serverport, 0, MACH_PORT_NULL); - if (err) { - jack_error("jack_client_resume: priming receive error: %s\n", - mach_error_string(err)); - return -1; - } - client->running = TRUE; - }else { - /* remote port is already the send-once he sent us */ - head->msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE, 0); - head->msgh_local_port = MACH_PORT_NULL; - head->msgh_size = sizeof(mach_msg_header_t); - - err = mach_msg(head, (MACH_SEND_MSG|MACH_RCV_MSG| - MACH_SEND_TIMEOUT|MACH_RCV_TIMEOUT), - sizeof(*head), sizeof(client->message), - client->serverport, WAIT, MACH_PORT_NULL); - - if (err) { - - /* - switch(err) { - case MACH_SEND_TIMED_OUT: - jack_error("MACH_SEND_TIMED_OUT %s\n", - client->control->name); - break; - - case MACH_RCV_TIMED_OUT: - jack_error("MACH_RCV_TIMED_OUT %s\n", - client->control->name); - break; - - case MACH_SEND_INVALID_DEST: - jack_error("MACH_SEND_INVALID_DEST %s\n", - client->control->name); - break; - } - */ - - jack_error("jack_client_resume: send error for %s\n", - mach_error_string(err)); - return err; - } - } - - return 0; + mach_msg_header_t *head = &client->message.header; + int err; + + if (!client->running) { + err = mach_msg (head, MACH_RCV_MSG, 0, sizeof(client->message), + client->serverport, 0, MACH_PORT_NULL); + if (err) { + jack_error ("jack_client_resume: priming receive error: %s\n", + mach_error_string (err)); + return -1; + } + client->running = TRUE; + } else { + /* remote port is already the send-once he sent us */ + head->msgh_bits = MACH_MSGH_BITS (MACH_MSG_TYPE_MOVE_SEND_ONCE, 0); + head->msgh_local_port = MACH_PORT_NULL; + head->msgh_size = sizeof(mach_msg_header_t); + + err = mach_msg (head, (MACH_SEND_MSG | MACH_RCV_MSG | + MACH_SEND_TIMEOUT | MACH_RCV_TIMEOUT), + sizeof(*head), sizeof(client->message), + client->serverport, WAIT, MACH_PORT_NULL); + + if (err) { + + /* + switch(err) { + case MACH_SEND_TIMED_OUT: + jack_error("MACH_SEND_TIMED_OUT %s\n", + client->control->name); + break; + + case MACH_RCV_TIMED_OUT: + jack_error("MACH_RCV_TIMED_OUT %s\n", + client->control->name); + break; + + case MACH_SEND_INVALID_DEST: + jack_error("MACH_SEND_INVALID_DEST %s\n", + client->control->name); + break; + } + */ + + jack_error ("jack_client_resume: send error for %s\n", + mach_error_string (err)); + return err; + } + } + + return 0; } -static inline int -jack_client_suspend(jack_client_t * client) +static inline int +jack_client_suspend (jack_client_t * client) { - int err = 0; - mach_msg_header_t * head = &client->message.header; - - head->msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, - MACH_MSG_TYPE_MAKE_SEND_ONCE); - head->msgh_remote_port = client->serverport; + int err = 0; + mach_msg_header_t * head = &client->message.header; + + head->msgh_bits = MACH_MSGH_BITS (MACH_MSG_TYPE_COPY_SEND, + MACH_MSG_TYPE_MAKE_SEND_ONCE); + head->msgh_remote_port = client->serverport; head->msgh_local_port = client->replyport; head->msgh_size = sizeof(mach_msg_header_t); - - err = mach_msg(head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_SEND_TIMEOUT, - sizeof(mach_msg_header_t), sizeof(client->message), - client->replyport, WAIT, MACH_PORT_NULL); - - if (err) { - jack_error("jack_client_suspend: RPC error: %s\n", - mach_error_string(err)); - return -1; - } - - return 0; + + err = mach_msg (head, MACH_SEND_MSG | MACH_RCV_MSG | MACH_SEND_TIMEOUT, + sizeof(mach_msg_header_t), sizeof(client->message), + client->replyport, WAIT, MACH_PORT_NULL); + + if (err) { + jack_error ("jack_client_suspend: RPC error: %s\n", + mach_error_string (err)); + return -1; + } + + return 0; } -static inline void -allocate_mach_serverport(jack_engine_t * engine, jack_client_internal_t *client) +static inline void +allocate_mach_serverport (jack_engine_t * engine, jack_client_internal_t *client) { - char buf[256]; - snprintf(buf, 256, "JackMachPort_%d", engine->portnum); - - if (mach_port_allocate(engine->servertask, MACH_PORT_RIGHT_RECEIVE, - &client->serverport)){ - jack_error("allocate_mach_serverport: can't allocate mach port"); - } - - if (mach_port_insert_right(engine->servertask, client->serverport, - client->serverport, MACH_MSG_TYPE_MAKE_SEND)){ - jack_error("allocate_mach_serverport: error inserting mach rights"); - } - - if (bootstrap_register(engine->bp, buf, client->serverport)){ - jack_error("allocate_mach_serverport: can't check in mach port"); - } - - client->portnum = engine->portnum; - engine->portnum++; + char buf[256]; + + snprintf (buf, 256, "JackMachPort_%d", engine->portnum); + + if (mach_port_allocate (engine->servertask, MACH_PORT_RIGHT_RECEIVE, + &client->serverport)) { + jack_error ("allocate_mach_serverport: can't allocate mach port"); + } + + if (mach_port_insert_right (engine->servertask, client->serverport, + client->serverport, MACH_MSG_TYPE_MAKE_SEND)) { + jack_error ("allocate_mach_serverport: error inserting mach rights"); + } + + if (bootstrap_register (engine->bp, buf, client->serverport)) { + jack_error ("allocate_mach_serverport: can't check in mach port"); + } + + client->portnum = engine->portnum; + engine->portnum++; } -static inline int -allocate_mach_clientport(jack_client_t * client, int portnum) +static inline int +allocate_mach_clientport (jack_client_t * client, int portnum) { - char buf[256]; - snprintf(buf, 256, "JackMachPort_%d", portnum); - - if (bootstrap_look_up(client->bp, buf, &client->serverport)){ - jack_error ("allocate_mach_clientport: can't find mach server port"); - return -1; - } - - if (mach_port_allocate(client->clienttask, MACH_PORT_RIGHT_RECEIVE, - &client->replyport)){ - jack_error("allocate_mach_clientport: can't allocate mach port"); - return -1; - } - - return 0; + char buf[256]; + + snprintf (buf, 256, "JackMachPort_%d", portnum); + + if (bootstrap_look_up (client->bp, buf, &client->serverport)) { + jack_error ("allocate_mach_clientport: can't find mach server port"); + return -1; + } + + if (mach_port_allocate (client->clienttask, MACH_PORT_RIGHT_RECEIVE, + &client->replyport)) { + jack_error ("allocate_mach_clientport: can't allocate mach port"); + return -1; + } + + return 0; } #endif /* __ipc__ */ |