Changeset 38827 in vbox for trunk/src/VBox/Additions
- Timestamp:
- Sep 22, 2011 3:42:33 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 74122
- Location:
- trunk/src/VBox/Additions/common/VBoxGuest
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest-solaris.c
r36408 r38827 29 29 #include <sys/sunddi.h> 30 30 #include <sys/open.h> 31 #include <sys/sunldi.h> 32 #include <sys/file.h> 31 33 #undef u /* /usr/include/sys/user.h:249:1 is where this is defined to (curproc->p_user). very cool. */ 32 34 … … 173 175 /** The IRQ Mutex */ 174 176 static kmutex_t g_IrqMtx; 177 /** Layered device handle for kernel keep-attached opens */ 178 static ldi_handle_t g_LdiHandle = NULL; 179 /** Ref counting for IDCOpen calls */ 180 static uint64_t g_cLdiOpens = 0; 181 /** The Mutex protecting the LDI handle in IDC opens */ 182 static kmutex_t g_LdiMtx; 175 183 176 184 /** … … 195 203 cmn_err(CE_NOTE, "failed to initialize driver logging rc=%d!\n", rc); 196 204 205 mutex_init(&g_LdiMtx, NULL, MUTEX_DRIVER, NULL); 206 197 207 /* 198 208 * Prevent module autounloading. … … 231 241 RTLogDestroy(RTLogRelSetDefaultInstance(NULL)); 232 242 RTLogDestroy(RTLogSetDefaultInstance(NULL)); 243 244 mutex_destroy(&g_LdiMtx); 233 245 234 246 RTR0Term(); -
trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuestIDC-unix.c.h
r33595 r38827 40 40 41 41 AssertPtrReturn(pu32Version, NULL); 42 43 #ifdef RT_OS_SOLARIS 44 mutex_enter(&g_LdiMtx); 45 if (!g_LdiHandle) 46 { 47 ldi_ident_t DevIdent = ldi_ident_from_anon(); 48 rc = ldi_open_by_name(VBOXGUEST_DEVICE_NAME, FREAD, kcred, &g_LdiHandle, DevIdent); 49 ldi_ident_release(DevIdent); 50 if (rc) 51 { 52 LogRel(("VBoxGuestIDCOpen: ldi_open_by_name failed. rc=%d\n", rc)); 53 mutex_exit(&g_LdiMtx); 54 return NULL; 55 } 56 } 57 ++g_cLdiOpens; 58 mutex_exit(&g_LdiMtx); 59 #endif 60 42 61 rc = VBoxGuestCreateKernelSession(&g_DevExt, &pSession); 43 62 if (RT_SUCCESS(rc)) … … 46 65 return pSession; 47 66 } 67 68 #ifdef RT_OS_SOLARIS 69 mutex_enter(&g_LdiMtx); 70 if (g_cLdiOpens > 0) 71 --g_cLdiOpens; 72 if ( g_cLdiOpens == 0 73 && g_LdiHandle) 74 { 75 ldi_close(g_LdiHandle, FREAD, kcred); 76 g_LdiHandle = NULL; 77 } 78 mutex_exit(&g_LdiMtx); 79 #endif 80 48 81 LogRel(("VBoxGuestIDCOpen: VBoxGuestCreateKernelSession failed. rc=%d\n", rc)); 49 82 return NULL; … … 64 97 AssertPtrReturn(pSession, VERR_INVALID_POINTER); 65 98 VBoxGuestCloseSession(&g_DevExt, pSession); 99 100 #ifdef RT_OS_SOLARIS 101 mutex_enter(&g_LdiMtx); 102 if (g_cLdiOpens > 0) 103 --g_cLdiOpens; 104 if ( g_cLdiOpens == 0 105 && g_LdiHandle) 106 { 107 ldi_close(g_LdiHandle, FREAD, kcred); 108 g_LdiHandle = NULL; 109 } 110 mutex_exit(&g_LdiMtx); 111 #endif 112 66 113 return VINF_SUCCESS; 67 114 }
Note:
See TracChangeset
for help on using the changeset viewer.