[Midnightbsd-cvs] src [11419] trunk/usr.bin/sort: cleanup

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Fri Jul 6 22:38:33 EDT 2018


Revision: 11419
          http://svnweb.midnightbsd.org/src/?rev=11419
Author:   laffer1
Date:     2018-07-06 22:38:33 -0400 (Fri, 06 Jul 2018)
Log Message:
-----------
cleanup

Modified Paths:
--------------
    trunk/usr.bin/sort/Makefile
    trunk/usr.bin/sort/bwstring.c
    trunk/usr.bin/sort/coll.c
    trunk/usr.bin/sort/coll.h
    trunk/usr.bin/sort/radixsort.c

Modified: trunk/usr.bin/sort/Makefile
===================================================================
--- trunk/usr.bin/sort/Makefile	2018-07-07 02:37:52 UTC (rev 11418)
+++ trunk/usr.bin/sort/Makefile	2018-07-07 02:38:33 UTC (rev 11419)
@@ -21,7 +21,16 @@
 MAN_SUB+= -e 's|%%THREADS%%|\.\\"|g'
 .endif
 
+.if !defined(WITHOUT_NLS)
+NLS+=	hu_HU.ISO8859-2
+NLSSRCFILES= ${NLS:S@$@.msg@}
+MAN_SUB+= -e 's|%%NLS%%||g'
+.for lang in ${NLS}
+NLSSRCDIR_${lang}= ${.CURDIR}/nls
+.endfor
+.else
 CFLAGS+= -DWITHOUT_NLS
 MAN_SUB+= -e 's|%%NLS%%|\.\\"|g'
+.endif
 
 .include <bsd.prog.mk>

Modified: trunk/usr.bin/sort/bwstring.c
===================================================================
--- trunk/usr.bin/sort/bwstring.c	2018-07-07 02:37:52 UTC (rev 11418)
+++ trunk/usr.bin/sort/bwstring.c	2018-07-07 02:38:33 UTC (rev 11419)
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: stable/10/usr.bin/sort/bwstring.c 281535 2015-04-14 18:57:50Z pfg $");
+__FBSDID("$FreeBSD: stable/10/usr.bin/sort/bwstring.c 309862 2016-12-12 00:47:12Z delphij $");
 
 #include <ctype.h>
 #include <errno.h>
@@ -911,7 +911,6 @@
 
 	if (MB_CUR_MAX == 1) {
 		const unsigned char *end, *s;
-		size_t len;
 
 		s = s0->data.cstr;
 		end = s + s0->len;
@@ -919,8 +918,6 @@
 		while (isblank(*s) && s < end)
 			++s;
 
-		len = strlen((const char*)s);
-
 		for (int i = 11; i >= 0; --i) {
 			if (cmonths[i] &&
 			    (s == (unsigned char*)strstr((const char*)s, (char*)(cmonths[i]))))
@@ -929,7 +926,6 @@
 
 	} else {
 		const wchar_t *end, *s;
-		size_t len;
 
 		s = s0->data.wstr;
 		end = s + s0->len;
@@ -937,8 +933,6 @@
 		while (iswblank(*s) && s < end)
 			++s;
 
-		len = wcslen(s);
-
 		for (int i = 11; i >= 0; --i) {
 			if (wmonths[i] && (s == wcsstr(s, wmonths[i])))
 				return (i);

Modified: trunk/usr.bin/sort/coll.c
===================================================================
--- trunk/usr.bin/sort/coll.c	2018-07-07 02:37:52 UTC (rev 11418)
+++ trunk/usr.bin/sort/coll.c	2018-07-07 02:38:33 UTC (rev 11419)
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: stable/10/usr.bin/sort/coll.c 251245 2013-06-02 09:43:48Z gabor $");
+__FBSDID("$FreeBSD: stable/10/usr.bin/sort/coll.c 318152 2017-05-10 20:29:01Z marius $");
 
 #include <sys/types.h>
 
@@ -106,14 +106,29 @@
 {
 
 	if (ka) {
-		for (size_t i = 0; i < keys_num; ++i)
-			if (ka->key[i].k && ka->key[i].k != s)
-				bwsfree(ka->key[i].k);
+		for (size_t i = 0; i < keys_num; ++i) {
+			const struct key_value *kv;
+
+			kv = get_key_from_keys_array(ka, i);
+			if (kv->k && kv->k != s)
+				bwsfree(kv->k);
+		}
 		memset(ka, 0, keys_array_size());
 	}
 }
 
 /*
+ * Get pointer to a key value in the keys set
+ */
+struct key_value *
+get_key_from_keys_array(struct keys_array *ka, size_t ind)
+{
+
+	return ((struct key_value *)((caddr_t)ka->key +
+	    ind * (sizeof(struct key_value) + key_hint_size())));
+}
+
+/*
  * Set value of a key in the keys set
  */
 void
@@ -123,7 +138,7 @@
 	if (ka && keys_num > ind) {
 		struct key_value *kv;
 
-		kv = &(ka->key[ind]);
+		kv = get_key_from_keys_array(ka, ind);
 
 		if (kv->k && kv->k != s)
 			bwsfree(kv->k);
@@ -157,9 +172,9 @@
 		if (si->str)
 			ret += bws_memsize(si->str);
 		for (size_t i = 0; i < keys_num; ++i) {
-			struct key_value *kv;
+			const struct key_value *kv;
 
-			kv = &(si->ka.key[i]);
+			kv = get_key_from_keys_array(&si->ka, i);
 
 			if (kv->k != si->str)
 				ret += bws_memsize(kv->k);
@@ -476,16 +491,19 @@
 int
 key_coll(struct keys_array *ps1, struct keys_array *ps2, size_t offset)
 {
+	struct key_value *kv1, *kv2;
 	struct sort_mods *sm;
 	int res = 0;
 
 	for (size_t i = 0; i < keys_num; ++i) {
+		kv1 = get_key_from_keys_array(ps1, i);
+		kv2 = get_key_from_keys_array(ps2, i);
 		sm = &(keys[i].sm);
 
 		if (sm->rflag)
-			res = sm->func(&(ps2->key[i]), &(ps1->key[i]), offset);
+			res = sm->func(kv2, kv1, offset);
 		else
-			res = sm->func(&(ps1->key[i]), &(ps2->key[i]), offset);
+			res = sm->func(kv1, kv2, offset);
 
 		if (res)
 			break;
@@ -1088,7 +1106,7 @@
 
 	if (d1 < d2)
 		return (-1);
-	if (d2 > d2)
+	if (d1 > d2)
 		return (+1);
 	return (0);
 }

Modified: trunk/usr.bin/sort/coll.h
===================================================================
--- trunk/usr.bin/sort/coll.h	2018-07-07 02:37:52 UTC (rev 11418)
+++ trunk/usr.bin/sort/coll.h	2018-07-07 02:38:33 UTC (rev 11419)
@@ -1,5 +1,5 @@
 /* $MidnightBSD$ */
-/*	$FreeBSD: stable/10/usr.bin/sort/coll.h 265160 2014-04-30 20:39:08Z pfg $	*/
+/*	$FreeBSD: stable/10/usr.bin/sort/coll.h 318152 2017-05-10 20:29:01Z marius $	*/
 
 /*-
  * Copyright (C) 2009 Gabor Kovesdan <gabor at FreeBSD.org>
@@ -92,7 +92,7 @@
 {
 	struct bwstring		*k; /* key string */
 	struct key_hint		 hint[0]; /* key sort hint */
-};
+} __packed;
 
 /*
  * Set of keys container object.
@@ -147,6 +147,7 @@
 
 struct keys_array *keys_array_alloc(void);
 size_t keys_array_size(void);
+struct key_value *get_key_from_keys_array(struct keys_array *ka, size_t ind);
 void set_key_on_keys_array(struct keys_array *ka, struct bwstring *s, size_t ind);
 void clean_keys_array(const struct bwstring *s, struct keys_array *ka);
 

Modified: trunk/usr.bin/sort/radixsort.c
===================================================================
--- trunk/usr.bin/sort/radixsort.c	2018-07-07 02:37:52 UTC (rev 11418)
+++ trunk/usr.bin/sort/radixsort.c	2018-07-07 02:38:33 UTC (rev 11419)
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: stable/10/usr.bin/sort/radixsort.c 259853 2013-12-25 00:53:48Z dim $");
+__FBSDID("$FreeBSD: stable/10/usr.bin/sort/radixsort.c 318152 2017-05-10 20:29:01Z marius $");
 
 #include <errno.h>
 #include <err.h>
@@ -84,12 +84,12 @@
 
 #if defined(SORT_THREADS)
 /* stack guarding mutex */
+static pthread_cond_t g_ls_cond;
 static pthread_mutex_t g_ls_mutex;
 
 /* counter: how many items are left */
 static size_t sort_left;
 /* guarding mutex */
-static pthread_mutex_t sort_left_mutex;
 
 /* semaphore to count threads */
 static sem_t mtsem;
@@ -100,14 +100,17 @@
 static inline void
 sort_left_dec(size_t n)
 {
-
-	pthread_mutex_lock(&sort_left_mutex);
+	pthread_mutex_lock(&g_ls_mutex);
 	sort_left -= n;
-	pthread_mutex_unlock(&sort_left_mutex);
+	if (sort_left == 0 && nthreads > 1)
+		pthread_cond_broadcast(&g_ls_cond);
+	pthread_mutex_unlock(&g_ls_mutex);
 }
 
 /*
  * Do we have something to sort ?
+ *
+ * This routine does not need to be locked.
  */
 static inline bool
 have_sort_left(void)
@@ -114,9 +117,8 @@
 {
 	bool ret;
 
-	pthread_mutex_lock(&sort_left_mutex);
 	ret = (sort_left > 0);
-	pthread_mutex_unlock(&sort_left_mutex);
+
 	return (ret);
 }
 
@@ -147,6 +149,11 @@
 
 #if defined(SORT_THREADS)
 	if (nthreads > 1)
+		pthread_cond_signal(&g_ls_cond);
+#endif
+
+#if defined(SORT_THREADS)
+	if (nthreads > 1)
 		pthread_mutex_unlock(&g_ls_mutex);
 #endif
 }
@@ -185,13 +192,19 @@
 
 	pthread_mutex_lock(&g_ls_mutex);
 
-	if (g_ls) {
-		sl = g_ls->sl;
-		saved_ls = g_ls;
-		g_ls = g_ls->next;
-	} else {
+	for (;;) {
+		if (g_ls) {
+			sl = g_ls->sl;
+			saved_ls = g_ls;
+			g_ls = g_ls->next;
+			break;
+		}
 		sl = NULL;
 		saved_ls = NULL;
+
+		if (have_sort_left() == 0)
+			break;
+		pthread_cond_wait(&g_ls_cond, &g_ls_mutex);
 	}
 
 	pthread_mutex_unlock(&g_ls_mutex);
@@ -244,9 +257,11 @@
 static inline int
 get_wc_index(struct sort_list_item *sli, size_t level)
 {
+	const struct key_value *kv;
 	const struct bwstring *bws;
 
-	bws = sli->ka.key[0].k;
+	kv = get_key_from_keys_array(&sli->ka, 0);
+	bws = kv->k;
 
 	if ((BWSLEN(bws) > level))
 		return (unsigned char) BWS_GET(bws,level);
@@ -494,13 +509,8 @@
 
 	for (;;) {
 		slc = pop_ls_mt();
-		if (slc == NULL) {
-			if (have_sort_left()) {
-				pthread_yield();
-				continue;
-			}
+		if (slc == NULL)
 			break;
-		}
 		run_sort_level_next(slc);
 	}
 }
@@ -511,9 +521,7 @@
 static void*
 sort_thread(void* arg)
 {
-
 	run_sort_cycle_mt();
-
 	sem_post(&mtsem);
 
 	return (arg);
@@ -609,8 +617,7 @@
 			pthread_t pth;
 
 			pthread_attr_init(&attr);
-			pthread_attr_setdetachstate(&attr,
-			    PTHREAD_DETACHED);
+			pthread_attr_setdetachstate(&attr, PTHREAD_DETACHED);
 
 			for (;;) {
 				int res = pthread_create(&pth, &attr,
@@ -627,7 +634,7 @@
 			pthread_attr_destroy(&attr);
 		}
 
-		for(i = 0; i < nthreads; ++i)
+		for (i = 0; i < nthreads; ++i)
 			sem_wait(&mtsem);
 	}
 #endif /* defined(SORT_THREADS) */
@@ -650,7 +657,7 @@
 		pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_ADAPTIVE_NP);
 
 		pthread_mutex_init(&g_ls_mutex, &mattr);
-		pthread_mutex_init(&sort_left_mutex, &mattr);
+		pthread_cond_init(&g_ls_cond, NULL);
 
 		pthread_mutexattr_destroy(&mattr);
 
@@ -678,7 +685,6 @@
 	if (nthreads > 1) {
 		sem_destroy(&mtsem);
 		pthread_mutex_destroy(&g_ls_mutex);
-		pthread_mutex_destroy(&sort_left_mutex);
 	}
 	nthreads = nthreads_save;
 #endif



More information about the Midnightbsd-cvs mailing list