• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Printing with Snow Leopard
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Printing with Snow Leopard


  • Subject: Re: Printing with Snow Leopard
  • From: "Gerriet M. Denkmann" <email@hidden>
  • Date: Sat, 19 Sep 2009 10:26:16 +0700


On 19 Sep 2009, at 00:36, Raleigh Ledet wrote:

You are printing the same instance of a view that is in your UI. So basically, your are trying to get the same view to print on two threads. Unless your view can handle concurrent drawing, this could be bad. NSTextView doesn't support concurrent drawing. I think you were getting lucky on Leopard.
And lucky on Tiger too.

Possible solutions: 1. Don't print concurrently.
That is my current solution. It blocks the user interface, which is bad, but 1000 pages get printed in well under 20 seconds, so it's not too bad.

2. Create another view and set it up with the content from your UI. Use this view for printing on a background thread.
Thanks for this suggestion. I will try it, when the blocking becomes annoying.


-raleigh

On Sep 12, 2009, at 6:18 AM, Gerriet M. Denkmann wrote:


On 11 Sep 2009, at 21:28, Corbin Dunn wrote:

Hi Gerriet,
Have you tried running with Zombies?
Yes.

Run -> Run With Performance Tool -> Zombies

If so, does that show an overrelease anywhere?
No.

Can you please log a bug on bugreporter.apple.com if you believe it is a bug in the Apple framework. Please include an isolated test case, if possible (that will greatly speed up investigation into the issue, especially if it is a recent regression).
Bug ID# 7218833.

thanks,

corbin

On Sep 10, 2009, at 10:54 PM, Gerriet M. Denkmann wrote:

An app which ran without problems on Leopard likes to crash on Snow Leopard (10.6.1) (both in i386 and x86_64).

How to crash: print several times; might crash the first time, might crash the seventh time, but crash it will.

The backtrace and the location of the crash varies wildly. In almost always it is some NSFont method.
The backtrace below is an exception. But still related to layout stuff.


I have a very strong feeling, that something (my code? Apple's printing code?) corrupts some memory which then results in random errors.
Or maybe not: just ran it a dozen times with GuardMalloc and it refused to crash. And GuardMalloc did not report any problems.
So maybe it is some timing problem with multiple threads?
I tried it more than a dozen times with: setCanSpawnSeparateThread: NO and it did not crash.


Are there any known problems with printing using setCanSpawnSeparateThread: YES?



====== the code ========

- (IBAction)printIt: sender ;
{
	(void)sender;

	... get path from NSSavePanel ....
	NSLog(@"%s got path \"%@\"",__FUNCTION__, path);

	NSPrintInfo *printInfo = [ self printInfo ];

[ printInfo setJobDisposition: NSPrintSaveJob ];
NSMutableDictionary *dictionary = [ printInfo dictionary ];
[ dictionary setObject: path forKey: NSPrintSavePath ];
[ dictionary setObject: [ NSNumber numberWithBool: YES ] forKey: NSPrintAllPages ];
NSLog(@"%s dictionary %@",__FUNCTION__, dictionary);

NSPrintOperation *po = [ NSPrintOperation printOperationWithView: textView printInfo: printInfo ];
[ po setShowsPrintPanel: NO ];
[ po setCanSpawnSeparateThread: YES ];


NSLog(@"%s NSPrintOperation %@",__FUNCTION__, po);
NSLog(@"%s will runOperationModalForWindow for %@",__FUNCTION__, [ textView window ]);
[ po runOperationModalForWindow: [ textView window ]
delegate: self
didRunSelector: @selector ( printOperationDidRun:success:contextInfo: )
contextInfo: NULL
];


	NSLog(@"%s printing \"%@\"",__FUNCTION__, path);
}


- (void)printOperationDidRun:(NSPrintOperation *)printOperation success:(BOOL)ok contextInfo:(void *)contextInfo
{
if ( !ok ) // error
{
NSLog(@"%s Error in: runOperationModalForWindow:delegate:didRunSelector:contextInfo :",__FUNCTION__);
return;
};

NSPrintInfo *printInfo = [ printOperation printInfo ];
NSMutableDictionary *dictionary = [ printInfo dictionary ];
NSString *path = [ dictionary objectForKey: NSPrintSavePath ];


	NSLog(@"%s printed \"%@\"",__FUNCTION__, path);
	NSLog(@"%s printInfo %@",__FUNCTION__, printInfo);

	return;
}

====== the output ========

-[GymDocument printIt:] got path "/private/var/folders/+s/ +sLxz7jCEUSrZ3BtxGVGUU+++TM/-Tmp-/Reading 1...4.pdf"
-[GymDocument printIt:] dictionary {
NSBottomMargin = 41;
NSCopies = 1;
NSDetailedErrorReporting = 0;
NSFaxNumber = "";
NSFirstPage = 1;
NSHorizonalPagination = 2;
NSHorizontallyCentered = 1;
NSJobDisposition = NSPrintSaveJob;
NSJobSavingFileNameExtensionHidden = 0;
NSJobSavingURL = "file://localhost/var/folders/+s/+sLxz7jCEUSrZ3BtxGVGUU+++TM/-Tmp-/Reading 1...4.pdf ";
NSLastPage = 2147483647;
NSLeftMargin = 18;
NSMustCollate = 1;
NSOrientation = 0;
NSPagesAcross = 1;
NSPagesDown = 1;
NSPaperName = "iso-a4";
NSPaperSize = "NSSize: {595, 842}";
NSPrintAllPages = 1;
NSPrintProtected = 0;
NSPrintTime = "0001-01-01 06:42:04 +064204";
NSPrinter = "{\n \"Device Description\" = {\n NSDeviceIsPrinter = YES;\n };\n \"Language Level\" = 2;\n Name = \" \";\n Type = \"\";\n}";
NSPrinterName = " ";
NSRightMargin = 18;
NSSavePath = "/var/folders/+s/+sLxz7jCEUSrZ3BtxGVGUU+++TM/-Tmp-/ Reading 1...4.pdf";
NSScalingFactor = 1;
NSTopMargin = 18;
NSVerticalPagination = 0;
NSVerticallyCentered = 1;
}
-[GymDocument printIt:] NSPrintOperation <NSConcretePrintOperation: 0x1158392e0>
-[GymDocument printIt:] will runOperationModalForWindow for <NSWindow: 0x100191b40>
-[GymDocument printIt:] printing "/private/var/folders/+s/ +sLxz7jCEUSrZ3BtxGVGUU+++TM/-Tmp-/Reading 1...4.pdf"
Program received signal: “EXC_BAD_ACCESS”.
(gdb) bt
#0 0x00007fff82b5843e in blockForLocation ()
#1 0x00007fff82b59c80 in -[NSRLEArray objectAtIndex:effectiveRange:] ()
#2 0x00007fff82b5fb25 in -[NSConcreteMutableAttributedString attribute:atIndex:effectiveRange:] ()
#3 0x00007fff83caa931 in -[NSConcreteTextStorage attribute:atIndex:effectiveRange:] ()
#4 0x00007fff83cb813c in -[NSLayoutManager locationForGlyphAtIndex:] ()
#5 0x00007fff83cb6272 in -[NSLayoutManager(NSPrivate) _drawGlyphsForGlyphRange:atPoint:parameters:] ()
#6 0x00007fff83c7b1a4 in -[NSTextView drawRect:] ()
#7 0x00007fff83c7a836 in -[NSTextView _drawRect:clip:] ()
#8 0x00007fff83c00c10 in -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView :] ()
#9 0x00007fff83c0159b in -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView :] ()
#10 0x00007fff83c0159b in -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView :] ()
#11 0x00007fff83c0159b in -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView :] ()
#12 0x00007fff83c0159b in -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView :] ()
#13 0x00007fff83c001f3 in -[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView :] ()
#14 0x00007fff83bfca97 in -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView :] ()
#15 0x00007fff83b76237 in -[NSView displayIfNeeded] ()
#16 0x00007fff83b710e3 in _handleWindowNeedsDisplay ()
#17 0x00007fff84a2f437 in __CFRunLoopDoObservers ()
#18 0x00007fff84a0b6e4 in __CFRunLoopRun ()
#19 0x00007fff84a0b03f in CFRunLoopRunSpecific ()
#20 0x00007fff82552c4e in RunCurrentEventLoopInMode ()
#21 0x00007fff825529b1 in ReceiveNextEventCommon ()
#22 0x00007fff8255290c in BlockUntilNextEventMatchingListInMode ()
#23 0x00007fff83b46520 in _DPSNextEvent ()
#24 0x00007fff83b45e89 in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] ()
#25 0x00007fff83b0ba7d in -[NSApplication run] ()
#26 0x00007fff83b04798 in NSApplicationMain ()
#27 0x0000000100001341 in main (argc=1, argv=0x7fff5fbff5b8) at / Volumes/เม่น/Users/gerriet/Source/Stuff 10.4.8/Gymnure/ main.m:13



_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


References: 
 >Printing with Snow Leopard (From: "Gerriet M. Denkmann" <email@hidden>)
 >Re: Printing with Snow Leopard (From: Corbin Dunn <email@hidden>)
 >Re: Printing with Snow Leopard (From: "Gerriet M. Denkmann" <email@hidden>)
 >Re: Printing with Snow Leopard (From: Raleigh Ledet <email@hidden>)

  • Prev by Date: Printing to NSData
  • Next by Date: How to show the "Info Panel" for the files in tableview?
  • Previous by thread: Re: Printing with Snow Leopard
  • Next by thread: Re: Subversion and Interface Builder
  • Index(es):
    • Date
    • Thread