<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>I have a feeling this is associated with the changes for IUO types that recently landed. I am very worried that this actually could happen on Darwin targets as well. Perhaps it is the swift overlay for dispatch that is correcting the failure on Darwin and the dispatch on Linux is missing that annotation. Worth looking into.<br><br>Sent from my iPhone</div><div><br>On May 6, 2016, at 12:16 AM, Mamatha Busi &lt;<a href="mailto:mamabusi@in.ibm.com">mamabusi@in.ibm.com</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><div class="socmaildefaultfont" dir="ltr" style="font-family:Arial;font-size:10.5pt"><div dir="ltr">&nbsp;</div>
<div dir="ltr">@ Philippe:&nbsp;Your right. Converting the 'attr' to an optional did do the job of creating a serial queue successfully. Thanks for that. I will create a PR for this.</div>
<div dir="ltr">&nbsp;</div>
<div dir="ltr">But this makes me think as to why until now,&nbsp;this was not caught by the compiler itself?</div>
<div dir="ltr">&nbsp;</div>
<div dir="ltr">Regards</div>
<div dir="ltr">Mamatha</div>
<div dir="ltr">&nbsp;</div>
<blockquote data-history-content-modified="1" data-history-expanded="1" dir="ltr" style="border-left:solid #aaaaaa 2px; margin-left:5px; padding-left:5px; direction:ltr; margin-right:0px">----- Original message -----<br>From: <a href="mailto:phausler@apple.com">phausler@apple.com</a><br>To: Mamatha Busi/India/IBM@IBMIN<br>Cc: swift-corelibs-dev &lt;<a href="mailto:swift-corelibs-dev@swift.org">swift-corelibs-dev@swift.org</a>&gt;<br>Subject: Re: [swift-corelibs-dev] Setting property "maxConcurrentOperationCount = 1" of NSOperation fails to execute operations using OpenSource Foundation.<br>Date: Thu, May 5, 2016 10:54 PM<br>&nbsp;<br><!--Notes ACF
<meta http-equiv="Content-Type" content="text/html charset=utf8" >-->
<div>Hmm that seems unfortunate. I wonder if the serial creation is due to an unwrapped optional? var attr: dispatch_queue_attr_t? instead might do the trick… or alternatively we could just let the underlying queue be concurrent all the time and enforce the max ops via making the semaphore always instantiated (in the case of max ops being 1) and initializing it to 1 to gate the operations.</div>&nbsp;

<div><blockquote type="cite"><div>On May 5, 2016, at 1:15 AM, Mamatha Busi via swift-corelibs-dev &lt;<a href="mailto:swift-corelibs-dev@swift.org" target="_blank">swift-corelibs-dev@swift.org</a>&gt; wrote:</div>&nbsp;

<div><div dir="ltr" style="font-family:Arial;font-size:10.5pt"><div dir="ltr" style="font-family:Arial;font-size:10.5pt"><div dir="ltr">Hello</div>
<div dir="ltr">&nbsp;</div>
<div dir="ltr"><p><b>Code snippet:</b></p>
<p>———————————————————————</p>
<p>&nbsp;&nbsp; &nbsp; let operation1 : NSBlockOperation = NSBlockOperation (block: {</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sleep(1)</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print("Opertion1")</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; })</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; let operation2 : NSBlockOperation = NSBlockOperation (block: {</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sleep(1)</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print("Opertion2”)</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; })</p>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div>
<p>&nbsp; &nbsp; &nbsp; &nbsp; var operations = [NSOperation]()</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; operations.append(operation1)</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; operations.append(operation2)</p>
<div>&nbsp;</div>
<p>&nbsp; &nbsp; &nbsp; &nbsp; let queue = NSOperationQueue()</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; queue.maxConcurrentOperationCount = 1</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; queue.addOperations(operations, waitUntilFinished: true)</p>
<div>&nbsp;</div>
<p>————————————————————————&nbsp;</p>
<div>&nbsp;</div>
<p>The above code snippet of adding operations to an operation queue and executing with the property ‘maxConcurrentOperationCount = 1’ fails while executing the above with the OpenSource Foundation and libDispatch of MAC inside Xcode.&nbsp;</p>
<p>The error I am seeing is:&nbsp;</p>
<p><b>fatal error: unexpectedly found nil while unwrapping an Optional value</b></p>
<p><b>Stack trace points to: </b>attr = DISPATCH_QUEUE_SERIAL&nbsp;</p>
<p>which implies that the libDispatch macro is coming as nil during the creation of the serial queue using libDispatch in the file&nbsp;NSOperationQueue</p>
<p>The same test-case passes on OSx.&nbsp;</p>
<p>When I do not restrict the serial operation i.e. I remove ‘&nbsp; queue.maxConcurrentOperationCount = 1’ , test case executes successfully.&nbsp;</p>
<p>Setting it to a different value other than 1 also causes no problems.&nbsp;</p>
<p>Am I doing something wrong with the API. If I set the property ‘ queue.maxConcurrentOperationCount = 1’ after adding operations to the queue, then the problem does not occur. But then this restricts me to control the operation execution to be serial. So, I expect the above snippet to work on OpenSource as well. Any thoughts on this?</p>
<div>&nbsp;</div>
<div>Thank you.</div>
<div>&nbsp;</div>
<div>Regards</div>
<div>Mamatha</div>
<div>&nbsp;</div></div></div></div><br>_______________________________________________<br>swift-corelibs-dev mailing list<br><a href="mailto:swift-corelibs-dev@swift.org" target="_blank">swift-corelibs-dev@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-corelibs-dev">https://lists.swift.org/mailman/listinfo/swift-corelibs-dev</a></div></blockquote></div></blockquote>
<div dir="ltr">&nbsp;</div></div><br>

</div></blockquote></body></html>