Don't rely on size argument in shmget call
* shm.cc (shmget): Fetch segment size from server rather than using size argument to accommodate existing segments. Add comment to explain why. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
		
							parent
							
								
									5778304f16
								
							
						
					
					
						commit
						023be4aedb
					
				|  | @ -1,3 +1,9 @@ | ||||||
|  | 2015-04-12  Corinna Vinschen  <corinna@vinschen.de> | ||||||
|  | 
 | ||||||
|  | 	* shm.cc (shmget): Fetch segment size from server rather than using | ||||||
|  | 	size argument to accommodate existing segments.  Add comment to explain | ||||||
|  | 	why. | ||||||
|  | 
 | ||||||
| 2015-04-10  Corinna Vinschen  <corinna@vinschen.de> | 2015-04-10  Corinna Vinschen  <corinna@vinschen.de> | ||||||
| 
 | 
 | ||||||
| 	* include/cygwin/version.h (CYGWIN_VERSION_DLL_MAJOR): Bump to 2000. | 	* include/cygwin/version.h (CYGWIN_VERSION_DLL_MAJOR): Bump to 2000. | ||||||
|  |  | ||||||
|  | @ -40,3 +40,6 @@ Bug Fixes | ||||||
| 
 | 
 | ||||||
| - Fix UTF-16 surrogate handling in wctomb and friends. | - Fix UTF-16 surrogate handling in wctomb and friends. | ||||||
|   Addresses: https://cygwin.com/ml/cygwin/2015-03/msg00452.html |   Addresses: https://cygwin.com/ml/cygwin/2015-03/msg00452.html | ||||||
|  | 
 | ||||||
|  | - Fix shmget usage of size parameter for already existing segments. | ||||||
|  |   Addresses: https://cygwin.com/ml/cygwin/2015-04/msg00105.html | ||||||
|  |  | ||||||
|  | @ -377,7 +377,14 @@ shmget (key_t key, size_t size, int shmflg) | ||||||
|      shmid and hdl value to the list. */ |      shmid and hdl value to the list. */ | ||||||
|   ssh_new_entry->shmid = shmid; |   ssh_new_entry->shmid = shmid; | ||||||
|   ssh_new_entry->hdl = hdl; |   ssh_new_entry->hdl = hdl; | ||||||
|  |   /* Fetch segment size from server.  If this is an already existing segment,
 | ||||||
|  |      the size value in this shmget call is supposed to be meaningless. */ | ||||||
|  |   struct shmid_ds stat; | ||||||
|  |   client_request_shm stat_req (shmid, IPC_STAT, &stat); | ||||||
|  |   if (stat_req.make_request () == -1 || stat_req.retval () == -1) | ||||||
|     ssh_new_entry->size = size; |     ssh_new_entry->size = size; | ||||||
|  |   else | ||||||
|  |     ssh_new_entry->size = stat.shm_segsz; | ||||||
|   ssh_new_entry->ref_count = 0; |   ssh_new_entry->ref_count = 0; | ||||||
|   SLIST_INSERT_HEAD (&ssh_list, ssh_new_entry, ssh_next); |   SLIST_INSERT_HEAD (&ssh_list, ssh_new_entry, ssh_next); | ||||||
|   SLIST_UNLOCK (); |   SLIST_UNLOCK (); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue