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

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. Sessions
  3. (c) 1996 Innobase Oy
  4. Created 6/25/1996 Heikki Tuuri
  5. *******************************************************/
  6. #include "usr0sess.h"
  7. #ifdef UNIV_NONINL
  8. #include "usr0sess.ic"
  9. #endif
  10. #include "trx0trx.h"
  11. /*************************************************************************
  12. Closes a session, freeing the memory occupied by it. */
  13. static
  14. void
  15. sess_close(
  16. /*=======*/
  17. sess_t* sess); /* in, own: session object */
  18. /*************************************************************************
  19. Opens a session. */
  20. sess_t*
  21. sess_open(void)
  22. /*===========*/
  23. /* out, own: session object */
  24. {
  25. sess_t* sess;
  26. #ifdef UNIV_SYNC_DEBUG
  27. ut_ad(mutex_own(&kernel_mutex));
  28. #endif /* UNIV_SYNC_DEBUG */
  29. sess = mem_alloc(sizeof(sess_t));
  30. sess->state = SESS_ACTIVE;
  31. sess->trx = trx_create(sess);
  32. UT_LIST_INIT(sess->graphs);
  33. return(sess);
  34. }
  35. /*************************************************************************
  36. Closes a session, freeing the memory occupied by it. */
  37. static
  38. void
  39. sess_close(
  40. /*=======*/
  41. sess_t* sess) /* in, own: session object */
  42. {
  43. #ifdef UNIV_SYNC_DEBUG
  44. ut_ad(mutex_own(&kernel_mutex));
  45. #endif /* UNIV_SYNC_DEBUG */
  46. ut_ad(sess->trx == NULL);
  47. mem_free(sess);
  48. }
  49. /*************************************************************************
  50. Closes a session, freeing the memory occupied by it, if it is in a state
  51. where it should be closed. */
  52. ibool
  53. sess_try_close(
  54. /*===========*/
  55. /* out: TRUE if closed */
  56. sess_t* sess) /* in, own: session object */
  57. {
  58. #ifdef UNIV_SYNC_DEBUG
  59. ut_ad(mutex_own(&kernel_mutex));
  60. #endif /* UNIV_SYNC_DEBUG */
  61. if (UT_LIST_GET_LEN(sess->graphs) == 0) {
  62. sess_close(sess);
  63. return(TRUE);
  64. }
  65. return(FALSE);
  66. }