os_sleep.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*-
  2.  * See the file LICENSE for redistribution information.
  3.  *
  4.  * Copyright (c) 1997-2002
  5.  * Sleepycat Software.  All rights reserved.
  6.  */
  7. #include "db_config.h"
  8. #ifndef lint
  9. static const char revid[] = "$Id: os_sleep.c,v 11.15 2002/07/12 18:56:52 bostic Exp $";
  10. #endif /* not lint */
  11. #ifndef NO_SYSTEM_INCLUDES
  12. #include <sys/types.h>
  13. #ifdef HAVE_SYS_SELECT_H
  14. #include <sys/select.h>
  15. #endif
  16. #ifdef HAVE_VXWORKS
  17. #include <sys/times.h>
  18. #include <time.h>
  19. #include <selectLib.h>
  20. #else
  21. #if TIME_WITH_SYS_TIME
  22. #include <sys/time.h>
  23. #include <time.h>
  24. #else
  25. #if HAVE_SYS_TIME_H
  26. #include <sys/time.h>
  27. #else
  28. #include <time.h>
  29. #endif /* HAVE_SYS_TIME_H */
  30. #endif /* TIME_WITH SYS_TIME */
  31. #endif /* HAVE_VXWORKS */
  32. #include <string.h>
  33. #include <unistd.h>
  34. #endif
  35. #include "db_int.h"
  36. /*
  37.  * __os_sleep --
  38.  * Yield the processor for a period of time.
  39.  *
  40.  * PUBLIC: int __os_sleep __P((DB_ENV *, u_long, u_long));
  41.  */
  42. int
  43. __os_sleep(dbenv, secs, usecs)
  44. DB_ENV *dbenv;
  45. u_long secs, usecs; /* Seconds and microseconds. */
  46. {
  47. struct timeval t;
  48. int ret;
  49. /* Don't require that the values be normalized. */
  50. for (; usecs >= 1000000; usecs -= 1000000)
  51. ++secs;
  52. if (DB_GLOBAL(j_sleep) != NULL)
  53. return (DB_GLOBAL(j_sleep)(secs, usecs));
  54. /*
  55.  * It's important that we yield the processor here so that other
  56.  * processes or threads are permitted to run.
  57.  */
  58. t.tv_sec = secs;
  59. t.tv_usec = usecs;
  60. do {
  61. ret = select(0, NULL, NULL, NULL, &t) == -1 ?
  62.     __os_get_errno() : 0;
  63. } while (ret == EINTR);
  64. if (ret != 0)
  65. __db_err(dbenv, "select: %s", strerror(ret));
  66. return (ret);
  67. }