[DTrace-devel] [PATCH] Remove remnants of length prefix code in strtab handling

Eugene Loh eugene.loh at oracle.com
Thu Mar 10 00:59:29 UTC 2022


Reviewed-by: Eugene Loh <eugene.loh at oracle.com>

On 3/9/22 4:43 PM, Kris Van Hees via DTrace-devel wrote:
> The removed code was introduced in commit aa9b7058a ("Store strings in
> the string table with varint length prefix") and commit 99719da90
> ("Transition from variable-length string size to 2-byte string size").
>
> It involved unnecessary copying of string data and also caused string
> comparison to be broken once length prefixes were removed in commit
> 29e3f422 ("Remove the string length prefix")..
>
> Signed-off-by: Kris Van Hees<kris.van.hees at oracle.com>
> ---
>   libdtrace/dt_strtab.c | 37 ++++++-------------------------------
>   1 file changed, 6 insertions(+), 31 deletions(-)
>
> diff --git a/libdtrace/dt_strtab.c b/libdtrace/dt_strtab.c
> index dcf5aa14..aeece0d7 100644
> --- a/libdtrace/dt_strtab.c
> +++ b/libdtrace/dt_strtab.c
> @@ -125,11 +125,7 @@ dt_strtab_compare(dt_strtab_t *sp, dt_strhash_t *hp,
>   		resid = sp->str_bufs[b] + sp->str_bufsz - buf;
>   		n = MIN(resid, len);
>   
> -		if ((rv = buf[0] - str[0]) != 0)
> -			return rv;
> -		if ((rv = buf[1] - str[1]) != 0)
> -			return rv;
> -		if ((rv = strncmp(buf + 2, str + 2, n)) != 0)
> +		if ((rv = strncmp(buf, str, n)) != 0)
>   			return rv;
>   
>   		buf += n;
> @@ -194,21 +190,13 @@ dt_strtab_index(dt_strtab_t *sp, const char *str)
>   	size_t	slen;
>   	ssize_t	rc;
>   	ulong_t	h;
> -	char	*s;
>   
>   	if (str == NULL || str[0] == '\0')
>   		return 0;	/* The empty string is always at offset 0. */
>   
>   	slen = strlen(str);
> -	s = malloc(slen + 1);
> -	if (s == NULL)
> -		return -1L;
> -
> -	memcpy(s, str, slen + 1);
> -
>   	h = str2hval(str, slen) % sp->str_hashsz;
> -	rc = dt_strtab_xindex(sp, s, slen, h);
> -	free(s);
> +	rc = dt_strtab_xindex(sp, str, slen, h);
>   
>   	return rc;
>   }
> @@ -220,33 +208,22 @@ dt_strtab_insert(dt_strtab_t *sp, const char *str)
>   	size_t		slen;
>   	ssize_t		off;
>   	ulong_t		h;
> -	char		*s;
>   
>   	if (str == NULL || str[0] == '\0')
>   		return 0;	/* The empty string is always at offset 0. */
>   
>   	slen = strlen(str);
> -	s = malloc(slen + 1);
> -	if (s == NULL)
> -		return -1L;
> -
> -	memcpy(s, str, slen + 1);
> -
>   	h = str2hval(str, slen) % sp->str_hashsz;
> -	off = dt_strtab_xindex(sp, s, slen, h);
> -	if (off != -1) {
> -		free(s);
> +	off = dt_strtab_xindex(sp, str, slen, h);
> +	if (off != -1)
>   		return off;
> -	}
>   
>   	/*
>   	 * Create a new hash bucket, initialize it, and insert it at the front
>   	 * of the hash chain for the appropriate bucket.
>   	 */
> -	if ((hp = malloc(sizeof(dt_strhash_t))) == NULL) {
> -		free(s);
> +	if ((hp = malloc(sizeof(dt_strhash_t))) == NULL)
>   		return -1L;
> -	}
>   
>   	hp->str_data = sp->str_ptr;
>   	hp->str_buf = sp->str_nbufs - 1;
> @@ -258,12 +235,10 @@ dt_strtab_insert(dt_strtab_t *sp, const char *str)
>   	 * Now copy the string data into our buffer list, and then update
>   	 * the global counts of strings and bytes.  Return str's byte offset.
>   	 */
> -	if (dt_strtab_copyin(sp, s, slen + 1) == -1) {
> -		free(s);
> +	if (dt_strtab_copyin(sp, str, slen + 1) == -1) {
>   		free(hp);
>   		return -1L;
>   	}
> -	free(s);
>   
>   	sp->str_nstrs++;
>   	sp->str_size += slen + 1;
> -- 2.34.1 _______________________________________________ DTrace-devel 
> mailing list DTrace-devel at oss.oracle.com 
> https://oss.oracle.com/mailman/listinfo/dtrace-devel



More information about the DTrace-devel mailing list