Use make-preserved-thread-fluid for the process resources.
Fixed indentation.
This commit is contained in:
		
							parent
							
								
									8bba3a13e1
								
							
						
					
					
						commit
						3620d702f0
					
				|  | @ -142,7 +142,8 @@ | |||
| ;;; (thread-set-resource ('X -> unspec)) | ||||
| 
 | ||||
| (define-syntax  make-process-resource | ||||
|   (syntax-rules () | ||||
|   (syntax-rules  | ||||
|    () | ||||
|    ((make-process-resource  | ||||
|      initialize-resource  | ||||
|      thread-read-resource thread-set-resource! thread-change-resource  | ||||
|  | @ -155,25 +156,25 @@ | |||
|       (define (initialize-resource) | ||||
| 	(set! *resource-cache* (process-read-resource)) | ||||
| 	(set! $resource ;;; TODO The old thread-fluid will remain | ||||
|   (make-thread-fluid | ||||
| 	      (make-preserved-thread-fluid | ||||
| 	       (process-read-resource))) | ||||
| 	(set! resource-lock (make-lock))) | ||||
|         | ||||
|       (define (cache-value) | ||||
| 	*resource-cache*) | ||||
|         | ||||
| ;;; Actually do the syscall and update the cache | ||||
| ;;; assumes the resource lock obtained | ||||
|       ;; Actually do the syscall and update the cache | ||||
|       ;; assumes the resource lock obtained | ||||
|       (define (change-and-cache dir) | ||||
| 	(process-set-resource dir) | ||||
| 	(set! *resource-cache* (process-read-resource))) | ||||
|        | ||||
| ;;; Dynamic-wind is not the right thing to take care of the lock; | ||||
| ;;; it would release the lock on every context switch. | ||||
| ;;; With-lock releases the lock on a condition, using call/cc will  | ||||
| ;;; skrew things up | ||||
|       ;; Dynamic-wind is not the right thing to take care of the lock; | ||||
|       ;; it would release the lock on every context switch. | ||||
|       ;; With-lock releases the lock on a condition, using call/cc will  | ||||
|       ;; skrew things up | ||||
|        | ||||
| ;;; The thread-specific resource: A thread fluid | ||||
|       ;; The thread-specific resource: A thread fluid | ||||
|        | ||||
|       (define $resource 'empty-resource-value) | ||||
|         | ||||
|  | @ -207,17 +208,17 @@ | |||
| 		     (change-and-cache dir) | ||||
| 		     (thread-set-resource! (cache-value))))) | ||||
| 
 | ||||
| ;;; For thunks that don't raise exceptions or throw to continuations, | ||||
| ;;; this is overkill & probably a little heavyweight for frequent use. | ||||
| ;;; But it is general. | ||||
| ;;; | ||||
| ;;; A less-general, more lightweight hack could be done just for | ||||
| ;;; syscalls.  We could probably dump the DYNAMIC-WINDs and build the | ||||
| ;;; rest of the pattern into one of the syscall-defining macros, or | ||||
| ;;; something.   | ||||
| ;;; Olin adds the following: the efficient way to do things is not | ||||
| ;;; with a dynamic wind or a lock. Just turn off interrupts, sync the | ||||
| ;;; resource, do the syscall, turn them back on. | ||||
|       ;; For thunks that don't raise exceptions or throw to continuations, | ||||
|       ;; this is overkill & probably a little heavyweight for frequent use. | ||||
|       ;; But it is general. | ||||
|       ;; | ||||
|       ;; A less-general, more lightweight hack could be done just for | ||||
|       ;; syscalls.  We could probably dump the DYNAMIC-WINDs and build the | ||||
|       ;; rest of the pattern into one of the syscall-defining macros, or | ||||
|       ;; something.   | ||||
|       ;; Olin adds the following: the efficient way to do things is not | ||||
|       ;; with a dynamic wind or a lock. Just turn off interrupts, sync the | ||||
|       ;; resource, do the syscall, turn them back on. | ||||
| 
 | ||||
|       (define (with-resource-aligned* thunk) | ||||
| 	(dynamic-wind (lambda () | ||||
|  | @ -226,9 +227,9 @@ | |||
| 		      thunk  | ||||
| 		      values)) | ||||
| 
 | ||||
| ;;; example syscall | ||||
| ;;; (define (exported-delete-file fname) | ||||
| ;;;;  (with-cwd-aligned (really-delete-file fname))) | ||||
|       ;; example syscall | ||||
|       ;; (define (exported-delete-file fname) | ||||
|       ;;  (with-cwd-aligned (really-delete-file fname))) | ||||
| 
 | ||||
| 
 | ||||
|       (define resource-reinitializer | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 mainzelm
						mainzelm