get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/134143/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 134143,
    "url": "http://patches.dpdk.org/api/patches/134143/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20231113104550.2138654-13-haijie1@huawei.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20231113104550.2138654-13-haijie1@huawei.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231113104550.2138654-13-haijie1@huawei.com",
    "date": "2023-11-13T10:45:41",
    "name": "[12/21] lib/eventdev: replace strtok with strtok_r",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "46733e10e4addfe59967d6aa694b46fe7357954e",
    "submitter": {
        "id": 2935,
        "url": "http://patches.dpdk.org/api/people/2935/?format=api",
        "name": "Jie Hai",
        "email": "haijie1@huawei.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20231113104550.2138654-13-haijie1@huawei.com/mbox/",
    "series": [
        {
            "id": 30264,
            "url": "http://patches.dpdk.org/api/series/30264/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=30264",
            "date": "2023-11-13T10:45:29",
            "name": "replace strtok with strtok_r",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/30264/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/134143/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/134143/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 15D5B430AB;\n\tMon, 13 Nov 2023 11:52:11 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 4D3BC40DDB;\n\tMon, 13 Nov 2023 11:51:09 +0100 (CET)",
            "from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187])\n by mails.dpdk.org (Postfix) with ESMTP id AA07F406FF\n for <dev@dpdk.org>; Mon, 13 Nov 2023 11:51:01 +0100 (CET)",
            "from kwepemd100004.china.huawei.com (unknown [172.30.72.55])\n by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4STR324WhXzrTbB;\n Mon, 13 Nov 2023 18:47:42 +0800 (CST)",
            "from localhost.localdomain (10.67.165.2) by\n kwepemd100004.china.huawei.com (7.221.188.31) with Microsoft SMTP Server\n (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id\n 15.2.1258.23; Mon, 13 Nov 2023 18:50:59 +0800"
        ],
        "From": "Jie Hai <haijie1@huawei.com>",
        "To": "<dev@dpdk.org>, Naga Harish K S V <s.v.naga.harish.k@intel.com>, Jerin\n Jacob <jerinj@marvell.com>",
        "CC": "<haijie1@huawei.com>, <lihuisong@huawei.com>, <fengchengwen@huawei.com>",
        "Subject": "[PATCH 12/21] lib/eventdev: replace strtok with strtok_r",
        "Date": "Mon, 13 Nov 2023 18:45:41 +0800",
        "Message-ID": "<20231113104550.2138654-13-haijie1@huawei.com>",
        "X-Mailer": "git-send-email 2.30.0",
        "In-Reply-To": "<20231113104550.2138654-1-haijie1@huawei.com>",
        "References": "<20231113104550.2138654-1-haijie1@huawei.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.67.165.2]",
        "X-ClientProxiedBy": "dggems703-chm.china.huawei.com (10.3.19.180) To\n kwepemd100004.china.huawei.com (7.221.188.31)",
        "X-CFilter-Loop": "Reflected",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Multiple threads calling the same function may cause condition\nrace issues, which often leads to abnormal behavior and can cause\nmore serious vulnerabilities such as abnormal termination, denial\nof service, and compromised data integrity.\n\nThe strtok() is non-reentrant, it is better to replace it with a\nreentrant function.\n\nSigned-off-by: Jie Hai <haijie1@huawei.com>\n---\n lib/eventdev/rte_event_eth_rx_adapter.c | 38 ++++++++++++-------------\n lib/eventdev/rte_eventdev.c             | 18 ++++++------\n 2 files changed, 28 insertions(+), 28 deletions(-)",
    "diff": "diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c\nindex 6db03adf0463..4107d600dfb7 100644\n--- a/lib/eventdev/rte_event_eth_rx_adapter.c\n+++ b/lib/eventdev/rte_event_eth_rx_adapter.c\n@@ -3651,7 +3651,7 @@ handle_rxa_get_queue_conf(const char *cmd __rte_unused,\n \tuint8_t rx_adapter_id;\n \tuint16_t rx_queue_id;\n \tint eth_dev_id, ret = -1;\n-\tchar *token, *l_params;\n+\tchar *token, *l_params, *sp;\n \tstruct rte_event_eth_rx_adapter_queue_conf queue_conf;\n \n \tif (params == NULL || strlen(params) == 0 || !isdigit(*params))\n@@ -3661,19 +3661,19 @@ handle_rxa_get_queue_conf(const char *cmd __rte_unused,\n \tl_params = strdup(params);\n \tif (l_params == NULL)\n \t\treturn -ENOMEM;\n-\ttoken = strtok(l_params, \",\");\n+\ttoken = strtok_r(l_params, \",\", &sp);\n \tRTE_EVENT_ETH_RX_ADAPTER_TOKEN_VALID_OR_GOTO_ERR_RET(token, -1);\n \trx_adapter_id = strtoul(token, NULL, 10);\n \tRTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_GOTO_ERR_RET(rx_adapter_id, -EINVAL);\n \n-\ttoken = strtok(NULL, \",\");\n+\ttoken = strtok_r(NULL, \",\", &sp);\n \tRTE_EVENT_ETH_RX_ADAPTER_TOKEN_VALID_OR_GOTO_ERR_RET(token, -1);\n \n \t/* Get device ID from parameter string */\n \teth_dev_id = strtoul(token, NULL, 10);\n \tRTE_ETH_VALID_PORTID_OR_GOTO_ERR_RET(eth_dev_id, -EINVAL);\n \n-\ttoken = strtok(NULL, \",\");\n+\ttoken = strtok_r(NULL, \",\", &sp);\n \tRTE_EVENT_ETH_RX_ADAPTER_TOKEN_VALID_OR_GOTO_ERR_RET(token, -1);\n \n \t/* Get Rx queue ID from parameter string */\n@@ -3684,7 +3684,7 @@ handle_rxa_get_queue_conf(const char *cmd __rte_unused,\n \t\tgoto error;\n \t}\n \n-\ttoken = strtok(NULL, \"\\0\");\n+\ttoken = strtok_r(NULL, \"\\0\", &sp);\n \tif (token != NULL)\n \t\tRTE_EDEV_LOG_ERR(\"Extra parameters passed to eventdev\"\n \t\t\t\t \" telemetry command, ignoring\");\n@@ -3723,7 +3723,7 @@ handle_rxa_get_queue_stats(const char *cmd __rte_unused,\n \tuint8_t rx_adapter_id;\n \tuint16_t rx_queue_id;\n \tint eth_dev_id, ret = -1;\n-\tchar *token, *l_params;\n+\tchar *token, *l_params, *sp = NULL;\n \tstruct rte_event_eth_rx_adapter_queue_stats q_stats;\n \n \tif (params == NULL || strlen(params) == 0 || !isdigit(*params))\n@@ -3733,19 +3733,19 @@ handle_rxa_get_queue_stats(const char *cmd __rte_unused,\n \tl_params = strdup(params);\n \tif (l_params == NULL)\n \t\treturn -ENOMEM;\n-\ttoken = strtok(l_params, \",\");\n+\ttoken = strtok_r(l_params, \",\", &sp);\n \tRTE_EVENT_ETH_RX_ADAPTER_TOKEN_VALID_OR_GOTO_ERR_RET(token, -1);\n \trx_adapter_id = strtoul(token, NULL, 10);\n \tRTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_GOTO_ERR_RET(rx_adapter_id, -EINVAL);\n \n-\ttoken = strtok(NULL, \",\");\n+\ttoken = strtok_r(NULL, \",\", &sp);\n \tRTE_EVENT_ETH_RX_ADAPTER_TOKEN_VALID_OR_GOTO_ERR_RET(token, -1);\n \n \t/* Get device ID from parameter string */\n \teth_dev_id = strtoul(token, NULL, 10);\n \tRTE_ETH_VALID_PORTID_OR_GOTO_ERR_RET(eth_dev_id, -EINVAL);\n \n-\ttoken = strtok(NULL, \",\");\n+\ttoken = strtok_r(NULL, \",\", &sp);\n \tRTE_EVENT_ETH_RX_ADAPTER_TOKEN_VALID_OR_GOTO_ERR_RET(token, -1);\n \n \t/* Get Rx queue ID from parameter string */\n@@ -3756,7 +3756,7 @@ handle_rxa_get_queue_stats(const char *cmd __rte_unused,\n \t\tgoto error;\n \t}\n \n-\ttoken = strtok(NULL, \"\\0\");\n+\ttoken = strtok_r(NULL, \"\\0\", &sp);\n \tif (token != NULL)\n \t\tRTE_EDEV_LOG_ERR(\"Extra parameters passed to eventdev\"\n \t\t\t\t \" telemetry command, ignoring\");\n@@ -3794,7 +3794,7 @@ handle_rxa_queue_stats_reset(const char *cmd __rte_unused,\n \tuint8_t rx_adapter_id;\n \tuint16_t rx_queue_id;\n \tint eth_dev_id, ret = -1;\n-\tchar *token, *l_params;\n+\tchar *token, *l_params, *sp = NULL;\n \n \tif (params == NULL || strlen(params) == 0 || !isdigit(*params))\n \t\treturn -1;\n@@ -3803,19 +3803,19 @@ handle_rxa_queue_stats_reset(const char *cmd __rte_unused,\n \tl_params = strdup(params);\n \tif (l_params == NULL)\n \t\treturn -ENOMEM;\n-\ttoken = strtok(l_params, \",\");\n+\ttoken = strtok_r(l_params, \",\", &sp);\n \tRTE_EVENT_ETH_RX_ADAPTER_TOKEN_VALID_OR_GOTO_ERR_RET(token, -1);\n \trx_adapter_id = strtoul(token, NULL, 10);\n \tRTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_GOTO_ERR_RET(rx_adapter_id, -EINVAL);\n \n-\ttoken = strtok(NULL, \",\");\n+\ttoken = strtok_r(NULL, \",\", &sp);\n \tRTE_EVENT_ETH_RX_ADAPTER_TOKEN_VALID_OR_GOTO_ERR_RET(token, -1);\n \n \t/* Get device ID from parameter string */\n \teth_dev_id = strtoul(token, NULL, 10);\n \tRTE_ETH_VALID_PORTID_OR_GOTO_ERR_RET(eth_dev_id, -EINVAL);\n \n-\ttoken = strtok(NULL, \",\");\n+\ttoken = strtok_r(NULL, \",\", &sp);\n \tRTE_EVENT_ETH_RX_ADAPTER_TOKEN_VALID_OR_GOTO_ERR_RET(token, -1);\n \n \t/* Get Rx queue ID from parameter string */\n@@ -3826,7 +3826,7 @@ handle_rxa_queue_stats_reset(const char *cmd __rte_unused,\n \t\tgoto error;\n \t}\n \n-\ttoken = strtok(NULL, \"\\0\");\n+\ttoken = strtok_r(NULL, \"\\0\", &sp);\n \tif (token != NULL)\n \t\tRTE_EDEV_LOG_ERR(\"Extra parameters passed to eventdev\"\n \t\t\t\t \" telemetry command, ignoring\");\n@@ -3855,7 +3855,7 @@ handle_rxa_instance_get(const char *cmd __rte_unused,\n \tuint8_t instance_id;\n \tuint16_t rx_queue_id;\n \tint eth_dev_id, ret = -1;\n-\tchar *token, *l_params;\n+\tchar *token, *l_params, *sp = NULL;\n \n \tif (params == NULL || strlen(params) == 0 || !isdigit(*params))\n \t\treturn -1;\n@@ -3863,14 +3863,14 @@ handle_rxa_instance_get(const char *cmd __rte_unused,\n \tl_params = strdup(params);\n \tif (l_params == NULL)\n \t\treturn -ENOMEM;\n-\ttoken = strtok(l_params, \",\");\n+\ttoken = strtok_r(l_params, \",\", &sp);\n \tRTE_EVENT_ETH_RX_ADAPTER_TOKEN_VALID_OR_GOTO_ERR_RET(token, -1);\n \n \t/* Get device ID from parameter string */\n \teth_dev_id = strtoul(token, NULL, 10);\n \tRTE_ETH_VALID_PORTID_OR_GOTO_ERR_RET(eth_dev_id, -EINVAL);\n \n-\ttoken = strtok(NULL, \",\");\n+\ttoken = strtok_r(NULL, \",\", &sp);\n \tRTE_EVENT_ETH_RX_ADAPTER_TOKEN_VALID_OR_GOTO_ERR_RET(token, -1);\n \n \t/* Get Rx queue ID from parameter string */\n@@ -3881,7 +3881,7 @@ handle_rxa_instance_get(const char *cmd __rte_unused,\n \t\tgoto error;\n \t}\n \n-\ttoken = strtok(NULL, \"\\0\");\n+\ttoken = strtok_r(NULL, \"\\0\", &sp);\n \tif (token != NULL)\n \t\tRTE_EDEV_LOG_ERR(\"Extra parameters passed to eventdev\"\n \t\t\t\t \" telemetry command, ignoring\");\ndiff --git a/lib/eventdev/rte_eventdev.c b/lib/eventdev/rte_eventdev.c\nindex 0ca32d672175..fabba0228672 100644\n--- a/lib/eventdev/rte_eventdev.c\n+++ b/lib/eventdev/rte_eventdev.c\n@@ -1784,7 +1784,7 @@ handle_queue_links(const char *cmd __rte_unused,\n \t\t   struct rte_tel_data *d)\n {\n \tint i, ret, port_id = 0;\n-\tchar *end_param;\n+\tchar *end_param, *sp = NULL;\n \tuint8_t dev_id;\n \tuint8_t queues[RTE_EVENT_MAX_QUEUES_PER_DEV];\n \tuint8_t priorities[RTE_EVENT_MAX_QUEUES_PER_DEV];\n@@ -1797,12 +1797,12 @@ handle_queue_links(const char *cmd __rte_unused,\n \tdev_id = strtoul(params, &end_param, 10);\n \tRTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \n-\tp_param = strtok(end_param, \",\");\n+\tp_param = strtok_r(end_param, \",\", &sp);\n \tif (p_param == NULL || strlen(p_param) == 0 || !isdigit(*p_param))\n \t\treturn -1;\n \n \tport_id = strtoul(p_param, &end_param, 10);\n-\tp_param = strtok(NULL, \"\\0\");\n+\tp_param = strtok_r(NULL, \"\\0\", &sp);\n \tif (p_param != NULL)\n \t\tRTE_EDEV_LOG_DEBUG(\n \t\t\t\"Extra parameters passed to eventdev telemetry command, ignoring\");\n@@ -1922,7 +1922,7 @@ handle_port_xstats(const char *cmd __rte_unused,\n \tint dev_id;\n \tint port_queue_id = 0;\n \tenum rte_event_dev_xstats_mode mode;\n-\tchar *end_param;\n+\tchar *end_param, *sp = NULL;\n \tconst char *p_param;\n \n \tif (params == NULL || strlen(params) == 0 || !isdigit(*params))\n@@ -1932,7 +1932,7 @@ handle_port_xstats(const char *cmd __rte_unused,\n \tdev_id = strtoul(params, &end_param, 10);\n \tRTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \n-\tp_param = strtok(end_param, \",\");\n+\tp_param = strtok_r(end_param, \",\", &sp);\n \tmode = RTE_EVENT_DEV_XSTATS_PORT;\n \n \tif (p_param == NULL || strlen(p_param) == 0 || !isdigit(*p_param))\n@@ -1940,7 +1940,7 @@ handle_port_xstats(const char *cmd __rte_unused,\n \n \tport_queue_id = strtoul(p_param, &end_param, 10);\n \n-\tp_param = strtok(NULL, \"\\0\");\n+\tp_param = strtok_r(NULL, \"\\0\", &sp);\n \tif (p_param != NULL)\n \t\tRTE_EDEV_LOG_DEBUG(\n \t\t\t\"Extra parameters passed to eventdev telemetry command, ignoring\");\n@@ -1956,7 +1956,7 @@ handle_queue_xstats(const char *cmd __rte_unused,\n \tint dev_id;\n \tint port_queue_id = 0;\n \tenum rte_event_dev_xstats_mode mode;\n-\tchar *end_param;\n+\tchar *end_param, *sp = NULL;\n \tconst char *p_param;\n \n \tif (params == NULL || strlen(params) == 0 || !isdigit(*params))\n@@ -1966,7 +1966,7 @@ handle_queue_xstats(const char *cmd __rte_unused,\n \tdev_id = strtoul(params, &end_param, 10);\n \tRTE_EVENTDEV_VALID_DEVID_OR_ERR_RET(dev_id, -EINVAL);\n \n-\tp_param = strtok(end_param, \",\");\n+\tp_param = strtok_r(end_param, \",\", &sp);\n \tmode = RTE_EVENT_DEV_XSTATS_QUEUE;\n \n \tif (p_param == NULL || strlen(p_param) == 0 || !isdigit(*p_param))\n@@ -1974,7 +1974,7 @@ handle_queue_xstats(const char *cmd __rte_unused,\n \n \tport_queue_id = strtoul(p_param, &end_param, 10);\n \n-\tp_param = strtok(NULL, \"\\0\");\n+\tp_param = strtok_r(NULL, \"\\0\", &sp);\n \tif (p_param != NULL)\n \t\tRTE_EDEV_LOG_DEBUG(\n \t\t\t\"Extra parameters passed to eventdev telemetry command, ignoring\");\n",
    "prefixes": [
        "12/21"
    ]
}