Remove native method memmove (#9)
diff --git a/src/main/java/org/apache/rocketmq/graalvm/CInterface.java b/src/main/java/org/apache/rocketmq/graalvm/CInterface.java index cfef42d..13d1a18 100644 --- a/src/main/java/org/apache/rocketmq/graalvm/CInterface.java +++ b/src/main/java/org/apache/rocketmq/graalvm/CInterface.java
@@ -522,63 +522,47 @@ @CEntryPoint(name = "send_message") public static void send_message(IsolateThread thread, int producerId, CMessage cMsg, CSendResult sendResult) { Admin instance = instances.get(producerId); - CTypeConversion.CCharPointerHolder pin = null; - try { - if (instance instanceof Producer) { - try { - Message msg = message_transformer(cMsg); - SendResult result = ((Producer) instance).send(msg); - sendResult.setErrorCode(0); - //sendResult.setError(CTypeConversion.toCString(null).get()); - //sendResult.setMessageId(CTypeConversion.toCString(result.getMessageId()).get()); - pin = CTypeConversion.toCString(result.getMessageId()); - int len = Math.min(ONS_SEND_RESULT_MSG_ID_LEN, result.getMessageId().length()); - memmove(sendResult.getMessageId(), pin.get(), WordFactory.unsigned(len)); - } catch (ONSClientException e) { - sendResult.setErrorCode(ErrorCode.SEND_MESSAGE_FAILURE.getCode()); - pin = CTypeConversion.toCString(e.getMessage()); - memmove(sendResult.getError(), pin.get(), - WordFactory.unsigned(Math.min(ONS_SEND_RESULT_ERR_MSG_LEN, e.getMessage().length()))); - } - } else { - sendResult.setErrorCode(ErrorCode.BAD_PRODUCER_INDEX.getCode()); - pin = CTypeConversion.toCString(ErrorCode.BAD_PRODUCER_INDEX.getDesc()); - int length = Math.min(ONS_SEND_RESULT_ERR_MSG_LEN, ErrorCode.BAD_PRODUCER_INDEX.getDesc().length()); - memmove(sendResult.getError(), pin.get(), WordFactory.unsigned(length)); + + if (instance instanceof Producer) { + try { + Message msg = message_transformer(cMsg); + SendResult result = ((Producer) instance).send(msg); + sendResult.setErrorCode(0); + int len = Math.min(ONS_SEND_RESULT_MSG_ID_LEN, result.getMessageId().length()); + CTypeConversion.toCString(result.getMessageId(), sendResult.getMessageId(), WordFactory.unsigned(len)); + } catch (ONSClientException e) { + sendResult.setErrorCode(ErrorCode.SEND_MESSAGE_FAILURE.getCode()); + CTypeConversion.toCString(e.getMessage(), sendResult.getError(), + WordFactory.unsigned(Math.min(ONS_SEND_RESULT_ERR_MSG_LEN, e.getMessage().length()))); } - } finally { - if (null != pin) { - pin.close(); - } + } else { + sendResult.setErrorCode(ErrorCode.BAD_PRODUCER_INDEX.getCode()); + int length = Math.min(ONS_SEND_RESULT_ERR_MSG_LEN, ErrorCode.BAD_PRODUCER_INDEX.getDesc().length()); + CTypeConversion.toCString(ErrorCode.BAD_PRODUCER_INDEX.getDesc(), sendResult.getError(), WordFactory.unsigned(length)); } + } @CEntryPoint(name = "send_message_oneway") public static void send_message_oneway(IsolateThread thread, int producerId, CMessage cMsg, CSendResult sendResult) { Admin instance = instances.get(producerId); - CTypeConversion.CCharPointerHolder pin = null; - try { - if (instance instanceof Producer) { - Message message = message_transformer(cMsg); - try { - ((Producer) instance).sendOneway(message); - } catch (ONSClientException e) { - sendResult.setErrorCode(ErrorCode.SEND_MESSAGE_FAILURE.getCode()); - pin = CTypeConversion.toCString(e.getMessage()); - int len = Math.min(ONS_SEND_RESULT_ERR_MSG_LEN, e.getMessage().length()); - memmove(sendResult.getError(), pin.get(), WordFactory.unsigned(len)); - } - } - } finally { - if (null != pin) { - pin.close(); + + if (instance instanceof Producer) { + Message message = message_transformer(cMsg); + try { + ((Producer) instance).sendOneway(message); + } catch (ONSClientException e) { + sendResult.setErrorCode(ErrorCode.SEND_MESSAGE_FAILURE.getCode()); + int len = Math.min(ONS_SEND_RESULT_ERR_MSG_LEN, e.getMessage().length()); + CTypeConversion.toCString(e.getMessage(), sendResult.getError(), WordFactory.unsigned(len)); } } + } - @CFunction - protected static native PointerBase memmove(PointerBase dest, PointerBase src, UnsignedWord n); + // @CFunction + //protected static native PointerBase memmove(PointerBase dest, PointerBase src, UnsignedWord n); @CEntryPoint(name = "send_message_async") public static void send_message_async(final IsolateThread thread, int producerId, final CMessage cMessage, @@ -592,18 +576,12 @@ mcb.exceptionFunctionPtr = cCallbackFunc.getExceptionFunction(); mcb.successFunctionPtr = cCallbackFunc.getSuccessFunction(); mcb.message = cMessage.getBody(); - CTypeConversion.CCharPointerHolder pin = null; try { ((Producer) instance).sendAsync(message, mcb); } catch (ONSClientException e) { cSendResult.setErrorCode(ErrorCode.SEND_MESSAGE_FAILURE.getCode()); - pin = CTypeConversion.toCString(e.getMessage()); - memmove(cSendResult.getError(), pin.get(), + CTypeConversion.toCString(e.getMessage(), cSendResult.getError(), WordFactory.unsigned(Math.min(ONS_SEND_RESULT_ERR_MSG_LEN, e.getMessage().length()))); - } finally { - if (null != pin) { - pin.close(); - } } } } @@ -612,70 +590,54 @@ public static void send_message_transaction(final IsolateThread thread, int producerId, final CMessage cMessage, final CSendResult sendResult, VoidPointer executor, TransactionExecuteFunctionPointer execute) { Admin instance = instances.get(producerId); - CTypeConversion.CCharPointerHolder pin = null; - try { - if (instance instanceof TransactionProducer) { - try { - Message message = message_transformer(cMessage); - GraalTransactionExecutor transactionExecutor = new GraalTransactionExecutor(); - transactionExecutor.opaque = executor; - transactionExecutor.transactionExecute = execute; - SendResult result = ((TransactionProducer) instance).send(message, transactionExecutor, null); - sendResult.setErrorCode(0); - pin = CTypeConversion.toCString(result.getMessageId()); - int len = Math.min(ONS_SEND_RESULT_MSG_ID_LEN, result.getMessageId().length()); - memmove(sendResult.getMessageId(), pin.get(), WordFactory.unsigned(len)); - } catch (Exception e) { - sendResult.setErrorCode(ErrorCode.SEND_MESSAGE_FAILURE.getCode()); - pin = CTypeConversion.toCString(e.getMessage()); - memmove(sendResult.getError(), pin.get(), - WordFactory.unsigned(Math.min(ONS_SEND_RESULT_ERR_MSG_LEN, e.getMessage().length()))); - } - } else { - sendResult.setErrorCode(ErrorCode.BAD_PRODUCER_INDEX.getCode()); - sendResult.setError(CTypeConversion.toCString(ErrorCode.BAD_PRODUCER_INDEX.getDesc()).get()); - pin = CTypeConversion.toCString(ErrorCode.BAD_PRODUCER_INDEX.getDesc()); - int len = Math.min(ONS_SEND_RESULT_MSG_ID_LEN, ErrorCode.BAD_PRODUCER_INDEX.getDesc().length()); - memmove(sendResult.getError(), pin.get(), WordFactory.unsigned(len)); + + if (instance instanceof TransactionProducer) { + try { + Message message = message_transformer(cMessage); + GraalTransactionExecutor transactionExecutor = new GraalTransactionExecutor(); + transactionExecutor.opaque = executor; + transactionExecutor.transactionExecute = execute; + SendResult result = ((TransactionProducer) instance).send(message, transactionExecutor, null); + sendResult.setErrorCode(0); + int len = Math.min(ONS_SEND_RESULT_MSG_ID_LEN, result.getMessageId().length()); + CTypeConversion.toCString(result.getMessageId(), sendResult.getMessageId(), WordFactory.unsigned(len)); + } catch (Exception e) { + sendResult.setErrorCode(ErrorCode.SEND_MESSAGE_FAILURE.getCode()); + CTypeConversion.toCString(e.getMessage(), sendResult.getError(), + WordFactory.unsigned(Math.min(ONS_SEND_RESULT_ERR_MSG_LEN, e.getMessage().length()))); } - } finally { - if (null != pin) { - pin.close(); - } + } else { + sendResult.setErrorCode(ErrorCode.BAD_PRODUCER_INDEX.getCode()); + sendResult.setError(CTypeConversion.toCString(ErrorCode.BAD_PRODUCER_INDEX.getDesc()).get()); + int len = Math.min(ONS_SEND_RESULT_MSG_ID_LEN, ErrorCode.BAD_PRODUCER_INDEX.getDesc().length()); + CTypeConversion.toCString(ErrorCode.BAD_PRODUCER_INDEX.getDesc(), sendResult.getError(), WordFactory.unsigned(len)); } + } @CEntryPoint(name = "send_order_message") public static void send_order_message(IsolateThread thread, int producerId, CMessage cMsg, CSendResult sendResult, CCharPointer shardingKey) { Admin instance = instances.get(producerId); - CTypeConversion.CCharPointerHolder pin = null; - try { - if (instance instanceof OrderProducer) { - Message msg = message_transformer(cMsg); - try { - SendResult result = ((OrderProducer) instance).send(msg, CTypeConversion.toJavaString(shardingKey)); - sendResult.setErrorCode(0); - pin = CTypeConversion.toCString(result.getMessageId()); - memmove(sendResult.getMessageId(), pin.get(), - WordFactory.unsigned(Math.min(ONS_SEND_RESULT_MSG_ID_LEN, result.getMessageId().length()))); - } catch (ONSClientException e) { - sendResult.setErrorCode(ErrorCode.SEND_MESSAGE_FAILURE.getCode()); - pin = CTypeConversion.toCString(e.getMessage()); - memmove(sendResult.getError(), pin.get(), - WordFactory.unsigned(Math.min(ONS_SEND_RESULT_ERR_MSG_LEN, e.getMessage().length()))); - } - } else { - sendResult.setErrorCode(ErrorCode.BAD_PRODUCER_INDEX.getCode()); - int length = Math.min(ONS_SEND_RESULT_ERR_MSG_LEN, ErrorCode.BAD_PRODUCER_INDEX.getDesc().length()); - pin = CTypeConversion.toCString(ErrorCode.BAD_PRODUCER_INDEX.getDesc()); - memmove(sendResult.getError(), pin.get(), WordFactory.unsigned(length)); + + if (instance instanceof OrderProducer) { + Message msg = message_transformer(cMsg); + try { + SendResult result = ((OrderProducer) instance).send(msg, CTypeConversion.toJavaString(shardingKey)); + sendResult.setErrorCode(0); + CTypeConversion.toCString(result.getMessageId(), sendResult.getMessageId(), + WordFactory.unsigned(Math.min(ONS_SEND_RESULT_MSG_ID_LEN, result.getMessageId().length()))); + } catch (ONSClientException e) { + sendResult.setErrorCode(ErrorCode.SEND_MESSAGE_FAILURE.getCode()); + CTypeConversion.toCString(e.getMessage(), sendResult.getError(), + WordFactory.unsigned(Math.min(ONS_SEND_RESULT_ERR_MSG_LEN, e.getMessage().length()))); } - } finally { - if (null != pin) { - pin.close(); - } + } else { + sendResult.setErrorCode(ErrorCode.BAD_PRODUCER_INDEX.getCode()); + int length = Math.min(ONS_SEND_RESULT_ERR_MSG_LEN, ErrorCode.BAD_PRODUCER_INDEX.getDesc().length()); + CTypeConversion.toCString(ErrorCode.BAD_PRODUCER_INDEX.getDesc(), sendResult.getError(), WordFactory.unsigned(length)); } + } private static Message message_transformer(CMessage cMsg) {