[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