@@ -135,6 +135,7 @@ struct irq_handle *irq_hook(int irqno, irq_handler handler, irq_handler end)
135135 __dpmi_version_ret version ;
136136 _go32_dpmi_seginfo info ;
137137 unsigned long old_sel , old_ofs ;
138+ unsigned long size ;
138139
139140 __dpmi_get_version (& version );
140141 if (irqno < 8 )
@@ -153,14 +154,15 @@ struct irq_handle *irq_hook(int irqno, irq_handler handler, irq_handler end)
153154 return NULL ;
154155
155156 /* Lock the interrupt handler in memory */
156- if (dpmi_lock_linear_region_base ((void * )handler , (unsigned long )end - (unsigned long )handler )) {
157+ size = (unsigned long )end - (unsigned long )handler ;
158+ if (dpmi_lock_linear_region_base ((void * )handler , size )) {
157159 _free_iret_wrapper (& info );
158160 return NULL ;
159161 }
160162
161163 irq = (struct irq_handle * ) malloc (sizeof (struct irq_handle ));
162164 irq -> c_handler = handler ;
163- irq -> handler_size = ( unsigned long ) end - ( unsigned long ) handler ;
165+ irq -> handler_size = size ;
164166 irq -> handler = info .pm_offset ;
165167 irq -> prev_selector = old_sel ;
166168 irq -> prev_offset = old_ofs ;
@@ -170,7 +172,7 @@ struct irq_handle *irq_hook(int irqno, irq_handler handler, irq_handler end)
170172
171173 if (dpmi_lock_linear_region_base (irq , sizeof (struct irq_handle ))) {
172174 free (irq );
173- dpmi_unlock_linear_region_base ((void * )handler , irq -> handler_size );
175+ dpmi_unlock_linear_region_base ((void * )handler , size );
174176 _free_iret_wrapper (& info );
175177 return NULL ;
176178 }
0 commit comments