summaryrefslogtreecommitdiffstats
path: root/debian/htdig/htdig-3.2.0b6/db/os_spin.c
diff options
context:
space:
mode:
Diffstat (limited to 'debian/htdig/htdig-3.2.0b6/db/os_spin.c')
-rw-r--r--debian/htdig/htdig-3.2.0b6/db/os_spin.c112
1 files changed, 112 insertions, 0 deletions
diff --git a/debian/htdig/htdig-3.2.0b6/db/os_spin.c b/debian/htdig/htdig-3.2.0b6/db/os_spin.c
new file mode 100644
index 00000000..b44b5b52
--- /dev/null
+++ b/debian/htdig/htdig-3.2.0b6/db/os_spin.c
@@ -0,0 +1,112 @@
+/*-
+ * See the file LICENSE for redistribution information.
+ *
+ * Copyright (c) 1997, 1998, 1999
+ * Sleepycat Software. All rights reserved.
+ */
+
+#include "db_config.h"
+
+#ifndef lint
+static const char sccsid[] = "@(#)os_spin.c 11.2 (Sleepycat) 11/3/99";
+#endif /* not lint */
+
+#ifndef NO_SYSTEM_INCLUDES
+#include <sys/types.h>
+#if defined(HAVE_PSTAT_GETDYNAMIC)
+#include <sys/pstat.h>
+#endif
+
+#include <limits.h>
+
+#ifndef _MSC_VER /* _WIN32 */
+#include <unistd.h>
+#endif
+
+#endif
+
+#include "db_int.h"
+#include "os_jump.h"
+
+#if defined(HAVE_PSTAT_GETDYNAMIC)
+/*
+ * __os_pstat_getdynamic --
+ * HP/UX.
+ */
+static int
+__os_pstat_getdynamic()
+{
+ struct pst_dynamic psd;
+
+ return (pstat_getdynamic(&psd,
+ sizeof(psd), (size_t)1, 0) == -1 ? 1 : psd.psd_proc_cnt);
+}
+#endif
+
+#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)
+/*
+ * CDB___os_sysconf --
+ * Solaris, Linux.
+ */
+static int
+CDB___os_sysconf()
+{
+ int nproc;
+
+ return ((nproc = sysconf(_SC_NPROCESSORS_ONLN)) > 1 ? nproc : 1);
+}
+#endif
+
+/*
+ * CDB___os_spin --
+ * Return the number of default spins before blocking.
+ *
+ * PUBLIC: int CDB___os_spin __P((void));
+ */
+int
+CDB___os_spin()
+{
+ /*
+ * If the application specified a value or we've already figured it
+ * out, return it.
+ *
+ * XXX
+ * We don't want to repeatedly call the underlying function because
+ * it can be expensive (e.g., requiring multiple filesystem accesses
+ * under Debian Linux).
+ */
+ if (DB_GLOBAL(db_tas_spins) != 0)
+ return (DB_GLOBAL(db_tas_spins));
+
+ DB_GLOBAL(db_tas_spins) = 1;
+#if defined(HAVE_PSTAT_GETDYNAMIC)
+ DB_GLOBAL(db_tas_spins) = __os_pstat_getdynamic();
+#endif
+#if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN)
+ DB_GLOBAL(db_tas_spins) = CDB___os_sysconf();
+#endif
+
+ /*
+ * Spin 50 times per processor, we have anecdotal evidence that this
+ * is a reasonable value.
+ */
+ if (DB_GLOBAL(db_tas_spins) != 1)
+ DB_GLOBAL(db_tas_spins) *= 50;
+
+ return (DB_GLOBAL(db_tas_spins));
+}
+
+/*
+ * CDB___os_yield --
+ * Yield the processor.
+ *
+ * PUBLIC: void CDB___os_yield __P((u_long));
+ */
+void
+CDB___os_yield(usecs)
+ u_long usecs;
+{
+ if (CDB___db_jump.j_yield != NULL && CDB___db_jump.j_yield() == 0)
+ return;
+ CDB___os_sleep(0, usecs);
+}